【问题标题】:NSData to UIImage back to NSData resulting length size tripledNSData 到 UIImage 回到 NSData 结果长度大小增加了三倍
【发布时间】:2017-01-17 03:08:28
【问题描述】:

我正在做一个简单的图像文件缩小任务,但遇到了这个问题。当对 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),新数据的长度大小会减少一点(很少),但是,复合限定损失应该是一个问题。

【问题讨论】:

标签: ios swift image uiimage


【解决方案1】:

您的代码正在做的是使用以下行将图像解压缩/提取到内存中 --> let image = UIImage(data: data)! 然后重新压缩为JPEG,let newImageData = UIImageJPEGRepresentation(image, 1)具有最高质量比(q=1.0)。这就是为什么图像突然变得这么大的原因。

因此,当您从 NSData 将图像作为 UIImage 获取时,解压缩/转换会更改图像的大小。

图像的文件大小实际上是 8112955。

【讨论】:

  • 数据来自图像文件(通过PHImageManager.defaultManager().requestImageDataForAsset获取),文件大小实际上接近2604768
猜你喜欢
  • 2012-06-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-24
相关资源
最近更新 更多