2016-07-26 71 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

這裏是一個在Photoshop中的幀圖像的屏幕截圖,顯示這些像素不存在於PNG中。

enter image description here

回答

0

的問題是,如果你看一下你的形象,緊鄰音符的像素顯然不是透明的。如果您注意到,那些出現在最終圖像中的白色像素不僅僅是偶爾的像素,而且還會出現在方塊中。

這些平方像素噪聲是JPEG僞影的信號標誌。很難說這是什麼原因造成的,因爲添加到這個問題中的圖像是JPEG(不支持透明度)。我假設你必須擁有此背景的PNG版本?您可能必須與我們分享以確認此診斷。

但底線是您需要仔細檢查原始圖像和那些看起來像是白​​噪聲的像素的透明度。確保在創建/操作這些圖像時避免使用JPEG文件格式,因爲它會丟失透明度信息並引入工件。 PNG文件通常更安全。

+0

原來是一個透明的PNG。在模擬器中,白色不會出現。 – user717452

+0

絕對不是問題。只需在PHOTOSHOP中打開PNG並放大以確認透明,除了筆記和標題在頂部。將在OP – user717452

+0

@ user717452中添加一個屏幕截圖 - 我用自己的圖片運行了您的代碼,但沒有遇到您描述的工件。我建議您仔細檢查坐在應用程序包中的PNG圖像,並確保它與您在Photoshop中驗證的圖像一樣。也許編輯問題以包含實際圖像,以便我們可以重現您描述的行爲。在我們重現行爲之前,我們無法幫助您。我的代碼和我自己的圖像嘗試工作正常。 – Rob