我想要实现的是使用iPhone相机拍照,然后用其他一些图片替换部分图片......我正在考虑拍摄照片,然后将其覆盖在具有低alpha的UIView上,然后我无法仅替换图片的某些部分。如果你能给我一些想法,我会非常有成绩。
答案 0 :(得分:1)
对于iOS,有几个图像API,我理解你的困惑。
首先你有UIImage
,图像的CocoaTouch抽象。
然后你有CGImage
,图像的CoreGraphics抽象。
另外,你有CIImage
,图像的CoreImage抽象。
这些都是不同的实体,不能以一种良好的无桥接方式一起使用。相反,您必须转换为不同的格式。
通常,您最终想要的是可以在窗口小部件中显示的UIImage。您可以从CGImage
或CIImage
创建此图片。 CIImage
包含高级过滤功能,例如,您可以在使用适当的合成过滤器进行描述时将另一个图像放在顶部。
CIImage
以任何方式更快更好,但在iOS中仍未完全支持。您可能还没有为iOS创建自己的自定义过滤器,并且只有一小部分过滤器尚未支持。
因此我建议使用CGImage
来实现此目的。您需要渲染到新的渲染上下文,然后从该渲染上下文创建一个UIImage。
这应该可以解决问题:
UIImage *originalImage = ...;
UIImage *frontImage = ...;
CGSize destinationSize = originalImage.frame.size;
UIGraphicsBeginImageContext(destinationSize);
[originalImage drawInRect:CGRectMake(0,0,destinationSize.width,destinationSize.height)];
[originalImage drawInRect:CGRectMake(10,10,destinationSize.width - 20,destinationSize.height - 20)];
UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
答案 1 :(得分:0)
CIImage *paper1 =[CIImage imageWithData:UIImageJPEGRepresentation( [UIImage imageNamed:@"heart123.png"], 1)];
现在,根据您的需要使用过滤器, 喜欢..“CISourceAtopCompositing”或“CISourceOverCompositing”过滤器 你得到你想要的东西
使用它们的代码是:
CIContext *context = [CIContext contextWithOptions:nil];
CIFilter filter= [CIFilter filterWithName:@"CISourceAtopCompositing"]; //for CISourceAtopCompositing method
[filter setDefaults];
[filter setValue:sourceImage forKey:@"inputImage"];
[filter setValue:backgroundImage forKey:@"inputBackgroundImage"];
这里backgroundImage和sourceImage都是从UIImage转换而来的CIImage
现在在编辑后使用此代码获取uiimage
CIImage *outputImage = [filter valueForKey:@"outputImage"];
CGImageRef cgImage = [context createCGImage:outputImage fromRect:[outputImage extent]];
UIImage *outputUIImage = [UIImage imageWithCGImage:cgImage];