我在现有的UIImage周围添加了一个相框(带有透明背景的图像),并将其全部保存为一个图像。在模拟器上,一切看起来都很棒。但是在设备上,它会在帧的图像的某些区域周围添加一些白色像素。这是我的代码:
- (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;
}
以下是生成的图像:
图片中使用的帧图像如下所示:
以下是photoshop中帧图像的屏幕截图,显示PNG中不存在这些像素。
答案 0 :(得分:0)
问题在于,如果你看一下你的图像,那些与音符紧邻的像素显然是不透明的。如果你注意到,那些出现在最终图像中的白色像素不仅仅是偶然的像素,而是出现在方块中。
这些平方像素噪声是JPEG伪像的标志。由于你在这个问题中添加的图像是JPEG(它不支持透明度),因此很难说是什么导致了这种情况。我想你必须有这个背景的PNG版本?您可能需要与我们分享以确认此诊断。
但最重要的是,您需要仔细检查原始图像和那些看似白噪声的像素的透明度。确保在创建/操作这些图像时避免使用JPEG文件格式,因为它会丢失透明度信息并引入工件。 PNG文件通常更安全。