2012-03-04 6 views
2

내가 뭘 하려는지 아이폰 카메라를 사용하여 사진을 찍은 다음 다른 사진과 그림의 일부를 교체하는 것입니다 ... 나는 사진을 찍은 다음 UIView로 오버레이 생각 낮은 알파를 사용하지만 그림의 특정 부분 만 바꿀 수는 없습니다. 당신이 나에게 몇 가지 아이디어를 줄 수 있다면 나는 정말로 성적이 될 것이다.변경 배경 이미지

답변

1

iOS의 경우 이미지 용 API가 여러 개 있습니다. 혼란 스럽습니다. 먼저 이미지의 CocoaTouch 추상화 인 UIImage이 있습니다. 그런 다음 이미지의 CoreGraphics 추상화 인 CGImage이 있습니다. 그리고 이미지의 CoreImage 추상화 인 CIImage이 있습니다.

이들은 모두 다리가없는 멋진 방식으로 함께 사용할 수없는 모든 엔티티입니다. 대신, 당신은 다른 형식으로 변환해야합니다.

일반적으로 원하는 것은 위젯에 표시 할 수있는 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(); 
0

포인트 모두 이미지 2. 변환이 ciimage 1. 사용 quartzcore 라이브러리에서 당신을 설명하고있다 :

트릭을 할해야합니다. 변환 코드는 다음과 같습니다 이제

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