【问题标题】:How to add sticker overlay to camera photo如何在相机照片上添加贴纸叠加层
【发布时间】:2014-12-21 14:33:05
【问题描述】:

我正在尝试模仿 Celebrity Clicks 的做法:将名人贴纸添加到相机供稿中,对其进行定位和缩放,然后拍照。这应该会给你一张贴有贴纸的照片,这就是 Celebrity Click 所做的。但是,我无法将相机照片与贴纸合并。有几个问题:贴纸比例和位置在最终相机图像上应用时是错误的,因为从相机拍摄的图像实际上在分辨率和尺寸上都比您设置时在实时相机源上显示的图片大得多贴上贴纸。

这是我现在正在做的事情:

[(GPUImageStillCamera *)videoCamera capturePhotoAsImageProcessedUpToFilter:selectedFilter withCompletionHandler:^(UIImage *processedImage, NSError *error) {
    selectedImage = [self imageByCombiningImage:processedImage withImage:celebOverlayView.imageView.image];
}];

- (UIImage*)imageByCombiningImage:(UIImage*)firstImage withImage:(UIImage*)secondImage {
UIImage *image = nil;
CGSize newImageSize = CGSizeMake(MAX(firstImage.size.width, secondImage.size.width),            MAX(firstImage.size.height, secondImage.size.height));
if (UIGraphicsBeginImageContextWithOptions != NULL) {
    UIGraphicsBeginImageContextWithOptions(newImageSize, NO, [[UIScreen mainScreen] scale]);
} else {
    UIGraphicsBeginImageContext(newImageSize);
}
[firstImage drawInRect:cameraView.frame];

[firstImage drawAtPoint:CGPointMake(roundf((newImageSize.width-firstImage.size.width)/2),
                                    roundf((newImageSize.height-firstImage.size.height)/2))];
[secondImage drawAtPoint:CGPointMake(roundf((newImageSize.width-secondImage.size.width)/2),
                                     roundf((newImageSize.height-secondImage.size.height)/2))];
image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();

return image;
}

我已附上前后照片,以便您看到我的问题。

相机设置屏幕:

使用相机拍摄的贴有贴纸的照片:

我猜有更好的方法来合并这两个图像,或者简单地将给定坐标处的贴纸应用到相机捕获的图像上。有什么建议吗?

【问题讨论】:

    标签: ios image camera overlay photo


    【解决方案1】:

    如果您将添加的视图的相对帧保存在选择器中,然后在应用添加的图像并结合两个图像时计算新帧,这是最简单的。

    其中一种方法是在拍照时将帧的所有参数分别与superview的宽度和高度相除,然后在尝试合并两者时将相同的帧坐标与图像的宽度和高度相乘图片。

    另外,对于您正在做的事情,我建议您丢失核心图形来绘制图像内容,而只使用图像视图:使用背景图像的大小创建图像视图,设置图像,然后添加另一个图像视图添加的图像并如上所述设置框架。然后只需创建视图的屏幕截图,您的图像就完成了。这样您就不会遇到缩放、变换等问题。

    【讨论】:

    • 所以您建议创建一个视图,其中包含两个图像视图:一个带有来自相机的图像,一个带有贴纸,然后只从该视图中获取上下文屏幕截图?
    • 是的,但您只需要 2 个视图,即背景图像视图和叠加图像视图。拍摄这种屏幕截图与您在后台进行的操作几乎相同,并且对于缩放、剪辑等非常方便。如果需要,请注意包含视图内容比例。
    • 那么我会从哪个视图截屏呢?从上面的图片可以看出,当时屏幕上还有其他元素,所以我不能只占整个屏幕。
    • 1.创建一个具有拍摄图像大小的图像视图并将拍摄的图像分配给它。 2. 使用前面描述的过程获得的框架创建一个图像视图,并将其作为子视图添加到在步骤一中创建的图像视图中。 3. 将覆盖图像分配给在第二步中创建的图像视图。 4. 创建步骤一中创建的图像视图的屏幕截图。注意:这些视图不可见,因为它们不在您的视图控制器层次结构中。
    • 知道了。我会试一试的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-08-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-10
    • 2018-10-25
    相关资源
    最近更新 更多