我注意到用Core Image缩小图像似乎会产生一些伪像,并且所得图像看起来不像相机预览那样清晰。该代码非常基本。

// `transform` is a CGAffineTransform object
transform = CGAffineTransformScale(transform, scale, scale);
CIImage *transformedImage = [image imageByApplyingTransform:transform];


有没有办法控制插值质量?

最佳答案

我研究了几种技术,发现了几种产生我非常满意的输出图像的方法。留在Core Image(它可以优化一系列图像操作)中比在Core Graphics之间来回跳动要方便得多。

我使用了Lanczos Scale Transform滤镜来平滑缩小图像:

// `image` is a CIImage
CIFilter *scaleFilter = [CIFilter filterWithName:@"CILanczosScaleTransform"];
scaleFilter setValue:image forKey:kCIInputImageKey];
[scaleFilter setValue:@(scale) forKey:kCIInputScaleKey];
CIImage *scaledImage = scaleFilter.outputImage;


另一重要的事情是确保所有几何图形都是以像素而不是点为单位计算的。与使用点相比,使用像素可以产生更高质量的图像。

锐化亮度滤镜可以帮助您在调整后的照片中定义细节:

CIFilter *sharpenFilter = [CIFilter filterWithName:@"CISharpenLuminance"];
[sharpenFilter setValue:scaledImage forKey:kCIInputImageKey];
[sharpenFilter setValue:@(0.1) forKey:kCIInputSharpnessKey];
CIImage *sharpenedImage = sharpenFilter.outputImage;


最后,JPEG压缩级别确实在某些图像上有所作为。大约0.9可以产生非常清晰的图像,而0.75则有一些伪像。

关于ios - 设置CIImage时设置插值算法/质量,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27496254/

10-12 22:34