我正在执行一个简单的图像文件大小减小任务,但遇到了这个问题。当对 JPEG 使用无损选项时,文件大小是图像原始 NSData 的三倍(相同分辨率)。有什么建议吗?
这是简单的代码:
let data = someImageData
print(data.length)
let image = UIImage(data: data)!
let newImageData = UIImageJPEGRepresentation(image, 1)
print(newImageData.length)
let newImageData = UIImageJPEGRepresentation(image, 0.8)
print(newImageData.length)
和输出:
2604768 //original length
8112955 //new length if compression = 1
2588870 //new length if compression = 0.8
看来我必须采取 0.8 的质量损失才能获得相同的数据长度。我错过了什么?皮斯帮忙。
编辑:我通过将数据转换为 UIImage 然后转换为 UIImageJPEGRepresentation(image, 1) 做了一些更多的测试,新数据的长度大小每个周期都会增加。但是,如果我使用 UIImageJPEGRepresentation(image, 0.8),新数据的长度大小会减少一点(非常少),但是,复合限定损失应该是一个问题。
最佳答案
您的代码所做的是将图像解压缩/提取到内存中 --> let image = UIImage(data: data)!
然后使用 let newImageData = UIImageJPEGRepresentation(image, 1)
以最高质量比 (q=1.0)
重新压缩为 JPEG。这就是为什么图像突然变得这么大。
因此,当您从 NSData 获取 UIImage 形式的图像时,解压缩/转换会更改图像的大小。
图像的文件大小实际上是 8112955。
关于ios - NSData 到 UIImage 返回到 NSData 结果长度大小增加了三倍,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39403549/