【问题标题】:UIImage resize performance and quality issueUIImage 调整大小性能和质量问题
【发布时间】:2013-06-18 06:32:23
【问题描述】:

我正在使用 UIImage,并且像其他人一样必须处理视网膜和非视网膜显示的适应性。据我所知,视网膜显示需要双像素。

我想知道是否可以简单地使用具有相同宽度/高度比的大图像,只需将其缩小以适应所有设备?

例如,我制作了一个大小为 200*200 像素的原始图像。现在我想在应用程序中使用它作为 20*20 像素和 80*80 像素(两种情况)。然后我必须制作四个副本,例如 img2020.png、img2020@2x.png、img8080.png 和 img8080@2x.png

所以如果我想在三种不同尺寸的情况下使用它,我必须存储 6 份。我可以只使用 UIImage 的调整大小功能来做到这一点吗?我尝试了一些,但无法弄清楚它的质量和性能。

有什么想法吗?非常感谢:)

【问题讨论】:

标签: ios resize uiimage


【解决方案1】:

您不需要制作 6 份副本。您应该使用大小200*200 pixel。并将imageview 的属性contentMode 设置为aspectFit。或者您也可以使用下面的函数并在运行时更改图像的大小。

-(UIImage *)Resize_Image:(UIImage *)image requiredHeight:(float)requiredheight andWidth:(float)requiredwidth
{ 
    float actualHeight = image.size.height; 
    float actualWidth = image.size.width; 
    if (actualWidth*requiredheight <actualHeight*requiredwidth) 
    {
        actualWidth=requiredheight*(actualWidth/actualHeight);
        actualHeight=requiredheight; 
    } 
    else
    { 
        actualHeight=requiredwidth*(actualWidth/actualHeight);   actualWidth=requiredwidth;
    }
    CGRect rect = CGRectMake(0.0, 0.0, actualWidth, actualHeight); 
    UIGraphicsBeginImageContext(rect.size); 
    [image drawInRect:rect]; 
    UIImage *img = UIGraphicsGetImageFromCurrentImageContext(); 
    UIGraphicsEndImageContext(); 

    return img;
}

【讨论】:

    【解决方案2】:

    我之前做过一些比较。让 iOS 处理大小调整会导致质量下降,有时真的无法接受。

    我有时候会很懒,我的做法是用retina版运行,如果不好,我会创建一个低分辨率的版本。

    如果你正在编写一个仅限 iPhone 的应用程序,市场上的大多数 iPhone 都有视网膜,所以我认为你不必担心非视网膜版本。只是我的意见。

    【讨论】:

      【解决方案3】:

      所有原生 API 都假设您使用 image.pngimage@2x.png,因此有时可能很难仅使用一张图像并根据视网膜/非视网膜进行缩放。此外,在非视网膜设备上使用视网膜图形会导致更广泛地使用这些设备的资源,从而导致电池消耗。当然,如果你有很多图像,那会降低应用程序的性能。 换句话说,使用双组图像是有原因的,您最好使用它而不是缩放一张大图像

      【讨论】:

      • 考虑到来自@Bala 的链接和这个答案,我想接受这个答案,因为我认为最好为视网膜和非视网膜制作两个副本。
      猜你喜欢
      • 1970-01-01
      • 2012-02-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多