iOS UIImage转换为固定内存大小

时间:2016-06-03 05:51:34

标签: ios objective-c uiimage compression

在我的iOS应用程序中,我必须处理一些大图像,特别是大小可能在1MB到30MB之间。

现在我必须将大图像转换为大约400KB(380~400),质量损失最小。

我们有一些解决方案可以将其转换为特定尺寸(CGSize),但我不知道如何将图像转换为磁盘上的其他尺寸...

2 个答案:

答案 0 :(得分:1)

最简单的方法是使用JPEG图像格式,因为将图像转换为数据时,可以指定简单的压缩质量值。这是使用UIImageJPEGRepresentation完成的。

另一部分是在操作完成之前您不知道大小。因此,您需要测试结果并决定要做什么。

显然,您可以优化并检查原始图像是否已经足够小。如果不是,则可以运行二进制搜索以找到适当的压缩质量设置。

二分搜索意味着将当前和目标状态之间的距离减半。因此,压缩质量介于0和1之间,这意味着您从0.5的压缩质量开始,看看结果是什么。如果图像仍然太大,则丢弃数据并再次尝试压缩质量为0.25(0.5 - (0.5 / 2))。如果图像太小,请丢弃数据,然后再次尝试使用0.75(0.5 +(0.5 / 2))的压缩质量。

继续这样做,直到图像大小在可接受的范围内。

答案 1 :(得分:0)

+ (UIImage *)scaleImage:(UIImage *)image toSize:(CGSize)newsizeimage
{

    CGSize actualSize = image.size;

float scale = actualSize.width/actualSize.height;

if (scale < 1) {
    newsizeimage.height = newsizeimage.width/scale;
} 
else {
    newsizeimage.width = newsizeimage.height*scale;
}

UIGraphicsBeginImageContext(newsizeimage);
[image drawInRect:CGRectMake(0, 0, newsizeimage.width, newsizeimage.height)];
UIImage* mynewImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();

return mynewImage;

}

<强>更新

缩小图像尺寸:

第1步:

jpeg格式保存图像以缩小图像尺寸,如下所示:

 NSData *imageData = UIImageJPEGRepresentation(your UIImage to save, 0.5);


[imageData writeToFile:path of doc_dir with image name atomically:YES];

第2步

为了降低图像的质量和尺寸,请使用:

CGSize newSize=CGSizeMake(50,50); // you can change resolution as pe your need


  UIGraphicsBeginImageContext(newSize);
[image drawInRect:CGRectMake(0, 0, newSize.width, newSize.height)];


UIImage* newImage = UIGraphicsGetImageFromCurrentImageContext();

UIGraphicsEndImageContext();