我在下面:
extension UIImage{
func compressToMaxSize(bytes: Int) -> UIImage{
var data: Data = UIImageJPEGRepresentation(self, 1.0)!
var compressionRatio: CGFloat = CGFloat(bytes) / CGFloat(data.count)
while data.count > bytes && compressionRatio > 0{
data = UIImageJPEGRepresentation(self, compressionRatio)!
compressionRatio = compressionRatio - 0.05
}
return UIImage(data: data)!
}
}
它确实返回一个大小小于bytes参数的UIImage,但我很怀疑,因为压缩的大小约为原始的十分之一,即使压缩率大约为0.46。我在这里缺少什么?
答案 0 :(得分:0)
我在这里缺少什么?
你缺少的是JPEG是什么。
JPEG是有损的。为了实现这种损失,它以特殊的方式对图像数据进行编码 - 例如,重复像素(相同颜色)之类的东西以简短的速记标记。压缩越大,像素被认为是彼此重复的越多(颜色的精确性被抛弃)。
因此,输出大小取决于图像。它有多详细?有多少颜色重复?无论压缩比如何,只有一种纯色的图像可以压缩得非常小。