2016-07-26 5 views
1

기존 UIImage 주위에 그림 프레임 (투명 배경이있는 이미지)을 추가하고 하나의 이미지로 저장합니다. 시뮬레이터에서는 모든 것이 잘 돌아가는 것처럼 보입니다. 그러나 장치에서 프레임의 일부 영역 주변에 흰색 픽셀이 추가됩니다. 여기iOS 주변의 흰색 픽셀 CIFilter를 사용하는 이미지

- (void)applyFilter { 
    NSLog(@"Running"); 

    UIImage *borderImage = [UIImage imageNamed:@"IMG_8055.PNG"]; 

    NSData *dataFromImage = UIImageJPEGRepresentation(self.imgView.image, 1); 

    CIImage *beginImage= [CIImage imageWithData:dataFromImage]; 

    CIContext *context = [CIContext contextWithOptions:nil]; 
    CIImage *border =[CIImage imageWithData:UIImagePNGRepresentation(borderImage)]; 
    border = [border imageByApplyingTransform:CGAffineTransformMakeScale(beginImage.extent.size.width/border.extent.size.width, beginImage.extent.size.height/border.extent.size.height)]; 

    CIFilter *filter= [CIFilter filterWithName:@"CISourceOverCompositing"]; //@"CISoftLightBlendMode"]; 
    [filter setDefaults]; 
    [filter setValue:border forKey:@"inputImage"]; 

    [filter setValue:beginImage forKey:@"inputBackgroundImage"]; 

    CIImage *outputImage = [filter valueForKey:@"outputImage"]; 







    CGImageRef cgimg = [context createCGImage:outputImage fromRect:[outputImage extent]]; 
    UIImage *newImg = [UIImage imageWithCGImage:cgimg]; 

    self.imgView.image = newImg; 

} 

결과 이미지입니다 :

enter image description here

그림에 사용 된 프레임 이미지는 다음과 같습니다

여기 enter image description here

가 여기 내 코드입니다 PNG에없는 픽셀을 보여주는 Photoshop의 프레임 이미지 스크린 샷

enter image description here

답변

0

문제는 당신이 당신의 이미지를 보면, 음표 바로 옆에 그 픽셀 분명히 투명하지 않은 것입니다. 그리고 눈치 채면 최종 이미지에 나타나는 흰색 픽셀은 가끔 픽셀이 아닌 사각형 블록으로 나타납니다.

이러한 제곱 오프 픽셀 노이즈는 JPEG 인공물의 흔적입니다. 이 질문에 추가 한 이미지가 JPEG (투명도를 지원하지 않음)이기 때문에 원인을 밝히기가 어렵습니다. 이 배경의 PNG 버전이 있어야한다고 가정합니다. 이 진단을 확인하려면 우리와 함께해야 할 수도 있습니다.

하지만 결론은 원본 이미지와 흰색 노이즈로 보이는 픽셀의 투명도를 신중하게 조사해야한다는 것입니다. 이러한 이미지를 만들거나 조작 할 때 투명도 정보가 손실되고 아티팩트가 발생하기 때문에 JPEG 파일 형식을 사용하지 마십시오. PNG 파일은 종종 더 안전합니다.

+0

원본은 투명한 PNG입니다. 시뮬레이터에서 흰색은 나타나지 않습니다. – user717452

+0

확실히 문제는 아닙니다. PHOTOSHOP에서 PNG를 열었고 맨 위의 메모와 제목을 제외하고는 투명하게 확대되었습니다. OP – user717452

+0

@ user717452에서 이것을 보여주는 스크린 샷을 추가 할 것입니다. - 내 자신의 이미지로 코드를 실행했지만 설명하는 아티팩트를 경험하지 못했습니다. 나는 당신의 app 번들에 앉아 PNG 이미지를 두 번 확인하고 Photoshop에서 확인한 것과 같은지 확인하는 것이 좋습니다. 아마도 실제 이미지를 포함하도록 질문을 편집하여 설명하는 동작을 재현 할 수 있습니다. 우리가 행동을 재현 할 수있을 때까지, 우리는 당신을 도울 수 없습니다. 그리고 당신의 코드와 제 자신의 이미지로 시도한 것이 잘되었습니다. – Rob

관련 문제