【问题标题】:What should compressionQuality be when using UIImageJPEGRepresentation?使用 UIImageJPEGRepresentation 时,compressionQuality 应该是什么?
【发布时间】:2014-12-07 10:58:37
【问题描述】:

我想对用户库中的照片应用过滤器,然后将其写回磁盘。我正在使用UIImageJPEGRepresentation。此函数采用介于 0.0 和 1.0 之间的 UIImagecompressionQuality 值。因为想保留原画质,所以设置为1.0。但我发现这实际上创建了一个文件大小比原始文件更大的图像文件,甚至更大一些。我注意到在 Apple 的 Sample Photo Editing Extension 应用程序中,他们总是将质量设置为 0.9。我试过了,它确实输出了接近原始照片文件大小的文件大小。这对我来说没有意义。有人可以解释一下吗?始终使用 0.9 是否合适? iOS 相机是否使用该值对其进行压缩,因此 0.9 是原始质量?或者,如果没有什么比这更好的质量,为什么 0.9 实际上不是 1.0?

NSData *renderedJPEGData = UIImageJPEGRepresentation(image, 0.9f);

【问题讨论】:

  • 0.9 将导致图像质量下降 - 应用了一定程度的压缩,因此您将丢失数据。如果您需要保留原始质量,请使用 UIImagePNGRepresentation。 JPG 是一种有损格式。使用 PNG 会导致文件变大,但保存的结果将与输入图像的质量相同。
  • @rickerbh 但是用 iPhone 相机拍摄的照片输出为 JPEG 而不是 PNG
  • 当然。但是,如果您想保持相同的质量,则不应使用有损格式重新编码图像。如果您对某些质量损失感到满意(人们查看图像通常不会注意到),请使用 JPG。我通常使用像 0.7 这样的值,因为我发现它通常会产生一个不可怕的图像,但通常可以很好地节省文件大小。如果您想了解更多关于重新压缩的信息,请查看ampsoft.net/webdesign-l/jpeg-compression.html的“重新压缩”部分
  • 我想在这里再补充一点。我确实保存了NSDataUIImageJPEGRepresentation() 返回并将其保存到文档目录,还从该数据创建UIImageobject 并将其保存到照片库。两者具有相同的图像数据,但生成的图像具有不同的大小(大小差异 > 50 Kb)。我也没有为此提供扩展名。无法弄清楚会发生什么。可能在将图像保存在照片库中时,它会提供一些质量扩展或类似功能。
  • @rickerbh 抱歉,我才刚刚开始讨论这个问题。使用UIImagePNGRepresentation 会导致错误:Error Domain=NSCocoaErrorDomain Code=-1 "The operation couldn’t be completed. (Cocoa error -1. 这是我将其写入磁盘的方式:pngData.writeToURL(contentEditingOutput.renderedContentURL, options: NSDataWritingOptions.AtomicWrite, error: &error) 知道发生了什么吗?

标签: ios uiimage uiimagejpegrepresentation


【解决方案1】:

您可以将 PNG 表示的图像转换为原始图像质量。

UIImagePNGRepresentation(image)

【讨论】:

  • 我不想使用 UIImagePNGRepresentation,我想在 UIImageJPEGRepresentation 上使用 :)
【解决方案2】:

这是一个老问题,您可能已经自己解决了这个问题,但如果有人仍然感兴趣,这可能会有所帮助。

(我不是 JPEG 专家)

UIImageJPEGRepresentation 没有考虑图像过去可能是如何压缩的,它只是在压缩它当时拥有的图像。

您提到了一张“来自用户的图书馆”的照片。用户可以在他们的库中拥有任何图像,压缩在任何compressionQuality

要尝试保持图像的文件大小相同,您需要知道它最初是如何保存的,即使您使用相同的compressionQuality,您也可能会导致文件大小不同,因为数据被压缩的是不同的。

至于使用 0.9 的 compressionQuality 来保存图像,这取决于您对图像质量的重视程度以及您想要使用的空间大小。 0.7 似乎经常被认为是一个很好的平衡。

我不确定 iOS 相机应用程序对图像的压缩程度(如果有的话),我也不确定它是否能保证达到最佳质量。如果它使用的是 0.9,您总是可以创建一个应用程序来拍摄照片并在保存之前对其进行较少压缩。

希望对你有帮助。

【讨论】:

    猜你喜欢
    • 2019-01-02
    • 2014-10-07
    • 2023-04-02
    • 2011-04-15
    • 2017-04-10
    • 2012-03-19
    • 2018-05-12
    • 2018-12-11
    • 1970-01-01
    相关资源
    最近更新 更多