24

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

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

2 回答 2

2

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

(我不是 JPEG 专家)

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

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

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

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

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

我希望这会有所帮助。

于 2018-05-22T11:04:06.300 回答
-5

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

UIImagePNGRepresentation(image)
于 2016-04-15T10:51:42.497 回答