在我的iOS应用程序中,我必须处理一些大图像,特别是大小可能在1MB到30MB之间。
现在我必须将大图像转换为大约400KB(380~400),质量损失最小。
我们有一些解决方案可以将其转换为特定尺寸(CGSize),但我不知道如何将图像转换为磁盘上的其他尺寸...
答案 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();