缩放时图像质量下降
Posted
技术标签:
【中文标题】缩放时图像质量下降【英文标题】:Image loses quality when scaled 【发布时间】:2016-08-12 13:20:41 【问题描述】:我知道,在缩小图像时,您必须预料到质量会有所下降,但是当我将图像分配给大小为 (75,75) 的 UIButton 时,它的质量非常好。
当我使用 UIPasteboard 将图像缩放到大小 (75,75) 以进行复制/粘贴时,它的质量真的很差。
背景:我的应用程序是一个键盘扩展,所以我有带有分配图像的按钮,当它们被点击时,我从按钮中获取图像,将其缩放到正确的大小,复制它到 UIPasteboard,然后粘贴。
代码:
这是我检测按钮点击和复制图像的代码:
- (IBAction) clickedImage:(id)sender
UIButton *btn = sender;
UIImage *scaledImage = btn.imageView.image;
UIImage *newImage = [scaledImage imageWithImage:scaledImage andSize:CGSizeMake(75, 75)];
NSData *imgData = UIImagePNGRepresentation(newImage);
UIPasteboard *pasteboard = [UIPasteboard generalPasteboard];
[pasteboard setData:imgData forPasteboardType:[UIPasteboardTypeListImage objectAtIndex:0]];
我有一个 UIImage 类别,它使用 imageWithImage:andSize:
方法来缩放图像。这是缩放方法:
- (UIImage*)imageWithImage:(UIImage*)image andSize:(CGSize)newSize
// Create a bitmap context.
UIGraphicsBeginImageContextWithOptions(newSize, NO, image.scale);
[image drawInRect:CGRectMake(0,0,newSize.width,newSize.height)];
UIImage* newImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return newImage;
没有意义的是,当我将图像放入 UIButton 时,它会缩小到与使用代码进行缩放时完全相同的大小,但 UIButton 的质量比我返回缩放后的质量要好得多图片。我的缩放代码有问题吗?有谁知道为什么两张图片之间的质量如此下降?
【问题讨论】:
您正在从按钮中检索图像。如果从资源中创建新的UIImage
是不是也一样?
@Losiowaty 是的,我试过创建一个新的 UIImage 并且它是一样的
这些图像是否可以更好地表示为矢量图形,然后以所需的任何缩放比例输出?
【参考方案1】:
执行此操作的更好方法是使用ImageIO
调整图像大小。这需要更长的时间,但缩放图像比重绘到图形上下文中要好得多。
【讨论】:
【参考方案2】:你试过这个https://github.com/mbcharbonneau/UIImage-Categories 吗?
Resize 类别中有一个有趣的方法
- (UIImage *)resizedImage:(CGSize)newSize
interpolationQuality:(CGInterpolationQuality)quality;
将质量设置为kCGInterpolationHigh
似乎效果不错(稍微慢一点)
【讨论】:
以上是关于缩放时图像质量下降的主要内容,如果未能解决你的问题,请参考以下文章