2016-01-03 41 views
0

该应用程序从网上下载图像,并以缩略图形式在表格视图中显示它们。但是,这些图像的质量“太好”了。它们都是高清品质,如果在表格视图中有太多图像,它可能会减慢UI的速度。在iOS中,如何将Web图像转换为质量较差的图像?

在将图像设置为单元格之前,如何使其“质量更低”? (占用内存少&需要较少的处理能力,以显示它们)

我想是这样的:

let smallerImage = UIImage(CGImage: image.CGImage!, scale: 0.2, orientation: image.imageOrientation) 

但预计它不工作。什么是正确的做法?

+0

您应该首先尝试下载更适合显示尺寸的图像,否则会浪费用户的细胞数据。 – jtbandes

+0

@jtbandes下载的图像不是由我安排的。它们就像它们一样,我想渲染这些图像。 –

+0

下采样将使用更多的CPU资源比显示更高分辨率的图像 –

回答

0

这是我从斯威夫特时代之前的一个旧项目的工作代码。一个额外的参数maxLength传递最大高度和宽度来使用(纵向是最大高度,横向是最大宽度)。希望你知道怎么翻译从Ojbective-C斯威夫特:

- (UIImage *) scaleImage: (UIImage *) image toMax: (float) maxLength 
{ 
    //scale down image to fit withing square of maxLength x maxLength 
    CGSize size = image.size; 
    printf("scaleImage source size: %f, %f\n", size.width, size.height); 
    float scaleX = size.width/maxLength; 
    float scaleY = size.height/maxLength; 
    float scale = scaleX > scaleY ? scaleX : scaleY; 
    int newWidth = round(size.width/scale); 
    int newHeight = round(size.height/scale); 
    CGSize newSize = CGSizeMake(size.width/scale, size.height/scale); 
    printf("scaleImage new size: %d, %d\n", newWidth, newHeight); 
    UIGraphicsBeginImageContext(newSize);// a CGSize that has the size you want 
    [image drawInRect:CGRectMake(0,0,newSize.width,newSize.height)]; 
    //image is the original UIImage 
    UIImage* newImage = UIGraphicsGetImageFromCurrentImageContext(); 
    UIGraphicsEndImageContext();  
    return newImage; 
} 

应用这种缩放确实限制由缩略图所消耗的总内存。

相关问题