您的位置:首页 > 其它

关于压缩图片的处理

2015-12-07 18:47 387 查看
//从文件中读取图片
UIImage *image = [UIImage imageWithContentsOfFile:@"/Users/owhat/Desktop/test/test/test.jpg"];
//将图片装换成data
NSData *data = UIImageJPEGRepresentation(image, 0.8);

//要创建一个新图片的保存路径
NSString *path = @"/Users/owhat/Desktop/test111.jpg";
//将新图片写成文件
[data writeToFile:path atomically:YES];


使用上述方法会有问题:

新图片的大小比原来的图片大小还要大。

后来我把压缩系统改成1.0,发现data的字节数大小就比原来的图片文件字节数大。

由此,我得出来一个结论:当把图片读入内存中德时候,大小就会变大,如果此时再把这块内存写入一个新文件 这个新文件大小肯定比原来的大。

但是我不知道为什么?

还有两个方法可以对图片进行压缩:

//压缩的大小~XX-------单位(K)
- (NSData *)compressImage:(UIImage *)image toMaxFileSize:(NSInteger)maxFileSize {
CGFloat compression = 0.9f;
CGFloat maxCompression = 0.1f;
NSData *imageData = UIImageJPEGRepresentation(image, compression);
while ([imageData length] > maxFileSize*1024 && compression > maxCompression) {
compression -= 0.1;
imageData = UIImageJPEGRepresentation(image, compression);
}

return imageData;

}


/**
*  压缩的比例
*
*  @param image     传入要压缩的图片
*  @param scaleSize 压缩的比例 0~1
*
*  @return 返回新图片
*/
- (UIImage *)scaleImage:(UIImage *)image toScale:(float)scaleSize

{
UIGraphicsBeginImageContext(CGSizeMake(image.size.width * scaleSize, image.size.height * scaleSize));

[image drawInRect:CGRectMake(0, 0, image.size.width * scaleSize, image.size.height * scaleSize)];
UIImage *scaledImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();

return scaledImage;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: