func downsizeImage(image: UIImage) -> Data{
var imagePointer = image
let targetDataSize: CGFloat = 256.0 * 256
var imageData = UIImageJPEGRepresentation(image, CGFloat(1.0))!
while (CGFloat(imageData.count) > targetDataSize){
var newProportion = targetDataSize / CGFloat(imageData.count)
print("image data size is \(imageData.count)\n")
imageData = UIImageJPEGRepresentation(imagePointer, CGFloat(newProportion))!
imagePointer = UIImage(data: imageData)!
}
return imageData
}
图像数据大小为6581432
图像数据大小为391167
图像数据大小为394974
图像数据大小为394915
图像数据大小为394845
有什么问题我的问题是什么?
答案 0 :(得分:0)
UIImageJPEGRepresentation的质量参数不是图像大小的一部分。相反,它指定了JPG压缩的有效性。零质量表示算法可以为您的数据生成的最小和最小大小的文件,但它无法保证其将达到一定的大小。实际大小取决于图像的大小和复杂性,在颜色/空间频率方面,因为压缩算法正在丢弃。如果您需要在磁盘上使图像具有一定的大小,我建议您将其采样到较低的分辨率,然后使用介于0.4和0.6之间的JPG质量设置。 Lowe值往往会产生一堆伪影,具体取决于您正在压缩的图像类型。
编辑:为UIImage添加下采样扩展代码:
extension UIImage {
func resize(to proportion: CGFloat) -> UIImage {
let newSize = CGSize(width: size.width * proportion, height: size.height * proportion)
return UIGraphicsImageRenderer(size: newSize).image { context in
self.draw(in: CGRect(origin: .zero, size: newSize))
}
}
}