压缩图片到指定尺寸大小和指定文件大小之注意坑--image和data的转化之间图片大小发生变化

网上提供的大都是UIImage的回调,返回image,但是我们使用的时候是作文data文件上传的,so,很多人在测试完发现这个递减的压缩效果还是不错的,随即就去用了,殊不知,压缩后的image转成data去使用的时候又把图片变大了~

代码如下:

/**

*  压缩图片到指定尺寸大小

*

*  @param image 原始图片

*  @param size  目标大小

*

*  @return 生成图片

*/

+(UIImage *)compressOriginalImage:(UIImage *)image toSize:(CGSize)size{

UIImage * resultImage = image;

UIGraphicsBeginImageContext(size);

[resultImage drawInRect:CGRectMake(00, 0, size.width, size.height)];

UIGraphicsEndImageContext();

return image;

}

/**

*  压缩图片到指定文件大小

*

*  @param image 目标图片

*  @param size  目标大小(最大值)

*

*  @return 返回的图片文件

*/

+(UIImage *)compressOriginalImage:(UIImage *)image toKb:(NSInteger)kb{

if (!image) {

return image;

}

if (kb<1) {

return image;

}

kb*=1024;

CGFloat compression = 0.9f;

CGFloat maxCompression = 0.1f;

NSData *imageData = UIImageJPEGRepresentation(image, compression);

while ([imageData length] > kb && compression > maxCompression) {

compression -= 0.1;

imageData = UIImageJPEGRepresentation(image, compression);

}

//data转成image后图片内存会变大,不可用

UIImage *compressedImage = [UIImage imageWithData:imageData];

return compressedImage;

}

所以我们最好直接使用data压缩,如下处理:

-(NSData *)compressOriginalImage:(UIImage *)image toKb:(NSInteger)kb{

kb*=1024;

CGFloat compression = 0.9f;

CGFloat maxCompression = 0.1f;

NSData *imageData = UIImageJPEGRepresentation(image, compression);

while ([imageData length] > kb && compression > maxCompression) {

compression -= 0.1;

imageData = UIImageJPEGRepresentation(image, compression);

}

return imageData;

}

这样直接返回data即可

推荐阅读更多精彩内容