压缩图片到指定尺寸大小和指定文件大小之注意坑--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即可

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容