gpt4 book ai didi

swift - while 循环缩小图像大小,无论运行多少次迭代都无法低于 400kB

转载 作者:行者123 更新时间:2023-11-30 12:48:14 25 4
gpt4 key购买 nike

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
}

image data size is 6581432

image data size is 391167

image data size is 394974

image data size is 394915

image data size is 394845

知道我的问题是什么吗?

最佳答案

UIImageJPEGRepresentation 的质量参数不是图像大小的比例。相反,它指定 JPG 压缩可能是有损的。质量为零表示算法可以为您的数据生成的损失最大且尺寸最小的文件,但不能保证其大小一定。实际大小取决于图像的大小和复杂性(就颜色/空间频率而言),因为这就是压缩算法所丢弃的内容。如果您需要使图像在磁盘上具有一定的大小,我建议您将其采样到较低的分辨率,然后使用 0.4 到 0.6 之间的 JPG 质量设置。低值往往会产生一堆伪影,具体取决于您要压缩的图像类型。

编辑:向 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))
}
}
}

关于swift - while 循环缩小图像大小,无论运行多少次迭代都无法低于 400kB,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41341465/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com