如何在 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()
并使用UIScreen
的scale
属性作为第三个参数。所有 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 中以高质量调整图像大小的主要内容,如果未能解决你的问题,请参考以下文章
如何在不损失图像质量的情况下调整图像大小以适合小型 HTML5 画布? [复制]