工作中遇到需要将图片压缩之后上传的需求。经过多方查询资料,目前总结出来两种方式总结一下备用。
1、第一种方法,基本上是无损压缩(肉眼基本看不出差别,精度基本不变)
UIImageJPEGRepresentation(image, compression)
这个方法可以将iPhone拍摄的照片压缩到几百Kb的极限值,到极限值之后不管compression这个参数多小,该函数返回的数据大小都不会再改变。也就是说这个方法的压缩是有最小值的,得到的是jpg格式。
另外有一个方法UIImagePNGRepresentation(<#UIImage * _Nonnull image#>)这个方法得到的数据会比之前那个方法得到的数据占用空间更大。
2、第二种方法,基本上就是将image重新设定像素大小达到压缩的目的 (改变尺寸)
为了达到压缩的目的,这种方法是有损的,就是会降低图片质量。
//压缩图片(将图片重画)
- (UIImage*)imageWithImageSimple:(UIImage*)image scaledToSize:(CGSize)newSize {
//首先根据image的size的长宽比和newSize进行设置新图片的大小(为了达到等比例缩放不变形的目的)
CGFloat wTmp;
CGFloat hTmp;
CGSize imgSize = image.size;
if (imgSize.width > imgSize.height) {
wTmp=newSize.width;
hTmp = imgSize.height * wTmp / imgSize.width;
} else {
hTmp=newSize.height;
wTmp = imgSize.width * hTmp / imgSize.height;
}
// Create a graphics image context
UIGraphicsBeginImageContext(CGSizeMake(wTmp, hTmp));
// Tell the old image to draw in this new context, with the desired
// new size
[image drawInRect:CGRectMake(0,0,wTmp,hTmp)];
// Get the new image from the context
UIImage* newImage = UIGraphicsGetImageFromCurrentImageContext();
// End the context
UIGraphicsEndImageContext();
// Return the new image.
return newImage;
}
这种方法的到的图片,newSize越小质量越差,但是得到的图片占用内存越小。设置多大的newSize自己斟酌决定。
3、温馨提示
综合一下自己平常在开发中常用的就是,先使用第一种方法保持精度不变,compression选择0.6或者0.7进行第一次压缩,然后再用第二种方法进行尺寸压缩,得到的就是我们最终想要的图片。
网友评论