我正在尝试模仿 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;
}
我附上了前后的照片,这样你就可以看到我的问题了。
相机设置屏幕:
用相机拍摄的贴有贴纸的照片:
我猜测有更好的方法来合并两个图像或简单地将给定坐标处的贴纸应用到相机捕获的图像上。有什么建议吗?
最佳答案
最简单的方法是在选取器中保存添加 View 的相关帧,然后在应用添加的图像组合两个图像时计算新帧。
很多方法之一是在拍摄照片时将框架的所有参数分别除以 super View 的宽度和高度,然后在尝试合并两者时将相同的框架坐标乘以图像宽度和高度图片。
此外,对于您正在做的事情,我建议您放弃核心图形来绘制图像内容,而只使用 ImageView :使用背景图像的大小创建 ImageView ,设置图像,然后添加另一个 ImageView 添加的图像并如上所述设置框架。然后只需创建 View 的屏幕截图即可完成图像。这样您就不会遇到缩放、转换等方面的问题。
关于ios - 如何在相机照片上添加贴纸叠加层,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27590324/