【问题标题】:How to ReSize Image with Good Quality in iPhone如何在 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;

}

【问题讨论】:

    标签: iphone objective-c cocoa-touch


    【解决方案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, ...); 
    

    将解决黑白背景问题

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-02-15
      • 2013-09-30
      • 1970-01-01
      • 2010-11-27
      • 2014-02-17
      • 2021-02-15
      • 2014-05-04
      • 2011-06-23
      相关资源
      最近更新 更多