在转换CIImage时设置插值算法/质量

时间:2014-12-16 01:47:07

标签: ios ios8 core-image

我注意到使用Core Image缩小图像似乎会产生一些瑕疵,并且生成的图像看起来并不像相机预览那样清晰。代码非常基础。

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

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

1 个答案:

答案 0 :(得分:2)

我研究了几种技术,并找到了几种产生输出图像的方法,我很满意。保持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则产生了一些文物。