iOS图片压缩
最近发现用户下载自己上传的图片比较耗时,检测发现是上传的原始图片过大,于是寻找降低图片数据大小的方法。
发现以下方法:
UIKIT_EXTERN NSData * __nullable UIImageJPEGRepresentation(UIImage * __nonnull image, CGFloat compressionQuality); // return image as JPEG. May return nil if image has no CGImageRef or invalid bitmap format. compression is 0(most)..1(least)
该方法可以把UIImage对象转换为JPEG图片格式,返回NSData对象。函数有两个参数,一个为UIImage对象,一个为压缩质量,取值为0-1。压缩大小取决于压缩质量参数,质量越小,返回的NSData数据越小。
该方法在不改变图片的分辨率的情况下降低图片的大小。对PNG格式的图片非常适用。
该方法上还有一个方法为返回PNG格式图片的二进制数据的方法:
UIKIT_EXTERN NSData * __nullable UIImagePNGRepresentation(UIImage * __nonnull image); // return image as PNG. May return nil if image has no CGImageRef or invalid bitmap format
使用时要注意,在UIImage对象没有CGImageRef属性或者没有可用的bitmap格式时使用该方法会返回nil。
如果要改变图片的分辨率来缩小图片占空间的大小,则可以使用图片绘制功能进行缩放,具体方法如下:
UIGraphicsBeginImageContext(size);
[image drawInRect:CGRectMake(0, 0, size.width, size.height)];
resultImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
各函数方法说明如下:
//开启图片绘制上下文,参数为要绘制图片的大小
UIKIT_EXTERN void UIGraphicsBeginImageContext(CGSize size);
//UIImage的绘制方法,把图片绘制到指定上下文中,参数为指定绘制的区域
- (void)drawInRect:(CGRect)rect; // mode = kCGBlendModeNormal, alpha = 1.0
//取出绘制好的图片,图片分辨率为开启上下文时设置的大小
UIKIT_EXTERN UIImage* __nullable UIGraphicsGetImageFromCurrentImageContext(void);
//关闭图片上下文
UIKIT_EXTERN void UIGraphicsEndImageContext(void);