介绍:
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循环中的临时对象无法及时释放,造成内存持续增长,最终导致程序的不稳定,甚至崩溃。
instruments:内存暴涨 尽管代码中创建了自己的@autoreleasepool,但是临时对象仍然没有被销毁,仍然以自己的节奏高速增长。
方案: 使用imageIO存储PNG图片
for循环存png图片
先增后减:增长峰值为截图产生的内存
另一种方式: 渲染
imageIO: