1 ios中两种图片压缩的方式

介绍:

UIImageJPEGRepresentation 需要两参数:图片的引用和压缩系数

UIImagePNGRepresentation方法需要一参数:图片的引用

两种方式返回的都是NSData类型

比较:

同样是读取摄像头拍摄的图片,UIImagePNGRepresentation(UIImage *image)返回的数据量大小为199K,而UIImageJPEGRepresentation(UIImage *image,1.0)返回的数据量只有140K,比前者少了50多K;而且如果对图片的质量要求不那么高的话,还可以通过设置压缩系数进一步减少数据量,降低压缩系数后UIImageJPEGRepresentation(UIImage *image, 0.5),返回的数据大小只有11K,大大压缩了图片数据量,而且从视图角度看,图片的质量并没有明显降低。所以,在读区图片数据内容的时候,建议优先使用方法UIImageJPEGRepresentation(UIImage *image, CGFloatcompressionQuality)

jpeg :耗时短

png:耗时长

代码:

NSData *data = nil;

if(!UIImagePNGRepresentation(image)) {

data =UIImageJPEGRepresentation(image,0.1);

}else{

data =UIImagePNGRepresentation(image);

}

实用:

将数组中的UIImage取出,存为本地PNG图片

问题:  通过UIImagePNGRepresentation()方法保存PNG格式图片时,由于ARC机制,会产生大量临时的autorelease对象,需要等待runloop的autoreleasepool销毁时才能销毁这些对象。由于for循环中的临时对象无法及时释放,造成内存持续增长,最终导致程序的不稳定,甚至崩溃。

1 ios中两种图片压缩的方式_第1张图片

instruments:内存暴涨  尽管代码中创建了自己的@autoreleasepool,但是临时对象仍然没有被销毁,仍然以自己的节奏高速增长。

方案: 使用imageIO存储PNG图片

1 ios中两种图片压缩的方式_第2张图片

for循环存png图片

1 ios中两种图片压缩的方式_第3张图片

先增后减:增长峰值为截图产生的内存


另一种方式: 渲染

1 ios中两种图片压缩的方式_第4张图片


imageIO:

你可能感兴趣的:(1 ios中两种图片压缩的方式)