缩放时图像质量下降

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 似乎效果不错(稍微慢一点)

【讨论】:

以上是关于缩放时图像质量下降的主要内容,如果未能解决你的问题,请参考以下文章

在颤振中使用 image.asset 时图像质量下降

MMX SSE 到 C 代码转换时图像质量下降

cv2.warpPerspective 导致图像质量下降

在android中创建缩放位图时保持图像质量

使用 vImageScale_ARGB8888 缩放图像时图像质量受到影响 - Cocoa Objective C

PHP JPEG 裁剪:质量下降?