我尝试使用UIImageView
来显示照片。但照片有时会有点大,我想压缩它,但我想保持它的大小。 例如,一张照片是4M,尺寸为320X480。我想压缩它,它可能有1M,但仍然有320X480的大小。压缩UIImage但保持大小
谢谢!
我尝试使用UIImageView
来显示照片。但照片有时会有点大,我想压缩它,但我想保持它的大小。 例如,一张照片是4M,尺寸为320X480。我想压缩它,它可能有1M,但仍然有320X480的大小。压缩UIImage但保持大小
谢谢!
使用JPEG压缩对其进行压缩。
lowResImage = [UIImage imageWithData:UIImageJPEGRepresentation(highResImage, quality)];
其中质量是0.0和1.0之间
你应该阅读UIImage documentation,一切都在那里解释...
如果你的目标是获得一个特定的数据长度下面的图片,很难猜测您需要的压缩比率,除非您知道源图像始终是特定的数据长度。下面是一个使用JPEG压缩,实现了目标长度...比方说1MB,以匹配问题,一个简单的迭代方法:
// sourceImage is whatever image you're starting with
NSData *imageData = [[NSData alloc] init];
for (float compression = 1.0; compression >= 0.0; compression -= .1) {
imageData = UIImageJPEGRepresentation(sourceImage, compression);
NSInteger imageLength = imageData.length;
if (imageLength < 1000000) {
break;
}
}
UIImage *finalImage = [UIImage imageWithData:imageData];
我见过一些使用while
循环通过以压缩图像的方法。 9或其他任何东西,直到达到目标大小,但我认为你会通过连续压缩/重构图像来损失图像质量和处理器周期。另外,这里的for
循环更安全一些,因为它在尝试最大可能的压缩(零)后会自动停止。
目前我用这种方式。但正如你看到的:image-> data-> image,它会消费太多吗? – scorpiozj
因为你不想减小图像的大小(宽度/高度),但是这个图像的数据表示(比特),我不认为有一个更好的方法。 JPEG压缩不是直接的,但是如果你想要压缩数据...... – AliSoftware
我看到的唯一的另一种方法是在'CGBitmapContext'上以较低的质量绘制'UIImage',但是对于这种情况,你需要松开例如颜色空间深度(较少颜色)或大小(较小图像尺寸),而不是在图像的NSBitmapRepresentation(使用JPEG,PNG,TIFF,RAW,RLE ...的像素的编码/压缩)它甚至可能会更糟糕,因此,在新的'CGBitmapContext'上绘制的结果'UIImage'很可能会使用RAW像素而没有进行任何压缩......) – AliSoftware