Ios UIImage调整性能和质量问题

Ios UIImage调整性能和质量问题,ios,resize,uiimage,Ios,Resize,Uiimage,我和UIImage一起工作,和其他人一样,我必须处理视网膜和非视网膜显示适应性。据我所知,视网膜显示需要双像素 我想知道我是否可以简单地使用一个宽高比相同的大图像,只需将其调整得更小以适应所有设备 例如,我制作了一幅大小为200*200像素的原始图像。现在我想在应用程序中使用20*20像素和80*80像素(两种情况)。然后我要复制四份,比如img2020.png,img2020@2x.png,img8080.png和img8080@2x.png 因此,如果我想在三种不同大小的情况下使用它,我必须

我和UIImage一起工作,和其他人一样,我必须处理视网膜和非视网膜显示适应性。据我所知,视网膜显示需要双像素

我想知道我是否可以简单地使用一个宽高比相同的大图像,只需将其调整得更小以适应所有设备

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

因此,如果我想在三种不同大小的情况下使用它,我必须存储6份副本。我可以使用UIImage的调整大小功能来执行此操作吗?我试过一点,但不知道它的质量和性能


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

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

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

我以前做过一些比较。让iOS处理大小调整会导致质量降低,有时甚至是不可接受的

我有时觉得很懒,我的方法是用视网膜版本运行它,如果它看起来不好,我会创建一个低分辨率的版本


如果你正在编写一个只支持iPhone的应用程序,市场上大多数iPhone都有视网膜,所以我认为你不应该担心非视网膜版本。不过这只是我的看法。

我以前做过一些比较。让iOS处理大小调整会导致质量降低,有时甚至是不可接受的

我有时觉得很懒,我的方法是用视网膜版本运行它,如果它看起来不好,我会创建一个低分辨率的版本


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

你不需要复印6份。您应该使用大小
200*200像素
。并将
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;
}
-(UIImage*)调整图像大小:(UIImage*)图像所需高度:(浮动)所需高度和宽度:(浮动)所需宽度
{ 
浮动实际高度=image.size.height;
浮动实际宽度=image.size.width;

如果(实际宽度*所需高度您不需要复制6份。您应该使用大小
200*200像素
。并将
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;
}
-(UIImage*)调整图像大小:(UIImage*)图像所需高度:(浮动)所需高度和宽度:(浮动)所需宽度
{ 
浮动实际高度=image.size.height;
浮动实际宽度=image.size.width;

如果(actualWidth*requiredheight此链接可能对您有所帮助。此链接可能对您有所帮助。考虑到@Bala的链接和此答案,我愿意接受此答案,因为我认为最好同时为视网膜和非视网膜制作副本。考虑到@Bala的链接和此答案,我愿意接受此答案,因为我我想最好同时复制视网膜和非视网膜。