ios - NSData 到 UIImage 返回到 NSData 结果长度大小增加了三倍

标签 ios swift image uiimage

我正在执行一个简单的图像文件大小减小任务,但遇到了这个问题。当对 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/

相关文章:

ios - 使用阴影设置从 UIView 生成图像

ios - 如何根据 API 类型发送带有 BODY 的 POST 或 GET 请求

javascript - 使用 FileReader 循环 <input multiple> 仅显示 div 网格中的最后一个图像

html - 在没有 javascript 的情况下显示隐藏的图像

swift - 是否可以快速读取权利文件

ios - Swift 3 和 backendless - 我如何上传图片?

ios - Facebook 应用程序。 Iphone 应用商店 ID 无效

ios - 如何使用界面生成器添加 UITableView 部分

ios - swift JSON 错误 : Could not cast value of type '__NSDictionaryM' to 'NSArray'

ios - 如何只读取一次文件数量?