如何在 iPhone 中以高质量调整图像大小

Posted

技术标签:

【中文标题】如何在 iPhone 中以高质量调整图像大小【英文标题】:How to ReSize Image with Good Quality in iPhone 【发布时间】:2011-07-13 11:13:05 【问题描述】:

我想创建一个照片库作为 iPhone 中的现有照片库。我在从照片库中选择的滚动查看器中添加图像。在添加图像之前,我调整了所选图像的大小并将其设置为 ImageView 控件。但是当我将添加的图像质量与 iPhone 照片库图像质量进行比较时,我的控制图像并不好。如何带来画质又不存在内存溢出问题。

-(UIImage*)imageWithImage:(UIImage*)image scaledToSize:(CGSize)newSize

    // Create a bitmap context.
    UIGraphicsBeginImageContext( newSize );
    [image drawInRect:CGRectMake(0,0,newSize.width,newSize.height)];
    UIImage* newImage = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    return newImage;


【问题讨论】:

【参考方案1】:

我也遇到了这个问题。我认为您使用的是配备 Retina 显示屏的 iPhone 4。即使你不是,你也应该解释它。代替UIGraphicsBeginImageContext(),使用UIGraphicsBeginImageContextWithOptions() 并使用UIScreenscale 属性作为第三个参数。所有 ios 设备都有 scale 属性,在 iPhone 4 上它设置为 2.0;其余的,在我写这篇文章时,它设置为 1.0。

所以你的代码,有了这些改变,就变成了

-(UIImage *)imageWithImage:(UIImage*)image scaledToSize:(CGSize)newSize

    // Create a bitmap context.
    UIGraphicsBeginImageContextWithOptions(newSize, YES, [UIScreen mainScreen].scale);
    [image drawInRect:CGRectMake(0,0,newSize.width,newSize.height)];
    UIImage* newImage = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    return newImage;


【讨论】:

您可以使用image.scale,而不是使用[UIScreen mainScreen].scale 我阅读了很多文章,这个简单的解决方案实际上效果很好,而且从 2K+ 到 100px 不会损失太多质量。只需添加 ...WithOptions() 就可以了。 我发现有趣的是,在尝试了许多复杂的解决方案之后,5 行方法是效果最好且质量最好的方法。【参考方案2】:

按照ageektrapped的解决方案,对于PNG的透明图像,您应该将第二个参数设置为NO / false

UIGraphicsBeginImageContextWithOptions(..., NO, ...); 

将解决黑白背景问题

【讨论】:

以上是关于如何在 iPhone 中以高质量调整图像大小的主要内容,如果未能解决你的问题,请参考以下文章

python如何在不损失质量的情况下调整(缩小)图像的大小

如何在不损失图像质量的情况下调整图像大小以适合小型 HTML5 画布? [复制]

如何根据正在使用的 iphone 按比例调整图像大小

如何针对特定目标文件大小优化图像大小?

iPhone - 内部带有未调整大小图像的 UIButton

如何在 Xamarin.UWP 中调整大小和减小大小(使用压缩质量值)