我尝试了流行的UIImage+Resize类别,并使用不同的插值设置。我尝试了通过CG方法和CIFilters进行缩放。然而,我无法获得一个既不模糊又没有锯齿状伪影的缩小图像。是否有其他解决方案或第三方库,可以让我获得非常清晰的图像?
在iPhone上肯定是可能的,因为例如Photos应用程序会在缩小图像时显示清晰的图像。
在iPhone上肯定是可能的,因为例如Photos应用程序会在缩小图像时显示清晰的图像。
CGContextSetInterpolationQuality(gtx, kCGInterpolationHigh);
CGContextSetShouldAntialias(gtx, true); << default varies by context type
CGContextDrawImage(gtx, rect, image);
这是我编写的例程,用于实现此操作。但是,根据您缩放原始图像的程度,可能会有一些轻微模糊。我正在对程序截屏图像进行缩放。
- (UIImage*)imageWithImage:(UIImage*)image scaledToSize:(CGSize)newSize {
UIGraphicsBeginImageContext(newSize);
[image drawInRect:CGRectMake(0, 0, newSize.width, newSize.height)];
UIImage* newImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return newImage;
}
你要找的是CGContextSetInterpolationQuality。
你应该尝试这个类别的添加 http://vocaro.com/trevor/blog/2009/10/12/resize-a-uiimage-the-right-way/
当图像被缩小时,通常建议应用一些锐化处理。
问题是,在iOS上,Core Image尚未实现锐化滤镜(CISharpenLuminance
,CIUnsharpMask
),因此您需要自己编写代码。或者向苹果公司施压,要求他们在iOS上也实现这些滤镜。
然而,锐化亮度和反遮罩模糊滤镜都是相当高级的滤镜,在以前的项目中,我发现即使是一个简单的3x3内核也会产生明显可见且令人满意的结果。
因此,如果你想在像素级别工作,你可以从图形上下文中获取图像数据,位掩码到R、G和B值,并像1999年那样编写图形代码。不过这有点像重复造轮子。
也许有一些标准的图形库可以做到这一点(例如ImageMagick)。