2012-03-04 231 views
2

我想要實現的是拍攝一張使用iPhone相機的圖片,然後用其他一些圖片替換部分圖片...我正在考慮拍攝該圖片,然後用UIView疊加低阿爾法,但我不能只取代圖片的某些部分。如果你能給我一些想法,我會非常成功。更改圖片背景圖片

回答

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(); 
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是CIImage從UIImage的

轉換

我們得到的UIImage編輯使用這個代碼後

CIImage *outputImage = [filter valueForKey:@"outputImage"]; 
CGImageRef cgImage = [context createCGImage:outputImage fromRect:[outputImage extent]]; 
UIImage *outputUIImage = [UIImage imageWithCGImage:cgImage];