需求:把图片压缩上传到服务器
方法一 像素压缩:
- UIImageJPEGRepresentation
NSData *imageData = UIImageJPEGRepresentation(image, compression);
- UIImagePNGRepresentation
NSData *imageData = UIImagePNGRepresentation(image);
问题:之前没有做调研,直接用了方法二,发现用户下载图片很慢,有时候下载不下来,后来发现由于图片太大。
原来UIImagePNGRepresentation(UIImage image)要比UIImageJPEGRepresentation(UIImage image, 1.0)返回的图片数据量大很多
项目中做图片上传之前,经过测试同一张拍照所得照片png大小在8M,而JPG压缩系数为0.75时候,大小只有1M。而且,将压缩系数降低对图片视觉上并没有太大的影响。
像素压缩,最大不能超过(如200k)
- (UIImage *)compressImage:(UIImage *)image toMaxFileSize:(NSInteger)maxFileSize {
CGFloat compression = 0.9f;
CGFloat maxCompression = 0.1f;
NSData *imageData = UIImageJPEGRepresentation(image, compression);
while (([imageData length]/1024 )> maxFileSize && compression > maxCompression) {
compression -= 0.1;
imageData = UIImageJPEGRepresentation(image, compression);
}
UIImage *compressedImage = [UIImage imageWithData:imageData];
return compressedImage;
}
PNG 图片是无损压缩,并且支持 alpha 通道,而 JPEG 图片则是有损压缩,可以指定 0-100% 的压缩比。
方法二 尺寸压缩
以后再谈...