更改图片背景图像

时间:2012-03-04 21:02:48

标签: ios uiview uiimage overlay

我想要实现的是使用iPhone相机拍照,然后用其他一些图片替换部分图片......我正在考虑拍摄照片,然后将其覆盖在具有低alpha的UIView上,然后我无法仅替换图片的某些部分。如果你能给我一些想法,我会非常有成绩。

2 个答案:

答案 0 :(得分:1)

对于iOS,有几个图像API,我理解你的困惑。 首先你有UIImage,图像的CocoaTouch抽象。 然后你有CGImage,图像的CoreGraphics抽象。 另外,你有CIImage,图像的CoreImage抽象。

这些都是不同的实体,不能以一种良好的无桥接方式一起使用。相反,您必须转换为不同的格式。

通常,您最终想要的是可以在窗口小部件中显示的UIImage。您可以从CGImageCIImage创建此图片。 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)

我正在解释你的观点 1.使用quartzcore库 2.将两个图像转换为ciimage。  转换代码是:(有许多,我选择其中之一)

 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];