我想对用户库中的照片应用过滤器,然后将其写回磁盘。我正在使用UIImageJPEGRepresentation
。此函数采用介于0.0和1.0之间的UIImage
和compressionQuality
值。因为我想保留原始质量,所以我将其设置为1.0。但我发现这实际上创建了一个文件大小比原始文件大的图像文件,甚至有点大。我注意到,在苹果的Sample Photo Editing Extension应用程序中,他们总是将质量设置为0.9。我试过了,它确实输出了一个接近原始照片文件大小的文件。这对我来说没有意义。有人能解释一下吗?总是使用0.9是否合适?iOS相机是否使用该值对其进行压缩,因此0.9是原始质量?或者,如果没有更好的质量,为什么0.9实际上不是1.0?
NSData *renderedJPEGData = UIImageJPEGRepresentation(image, 0.9f);
这是一个老问题,你可能已经自己解决了,但如果有人仍然感兴趣,这可能会有所帮助。
(我不是JPEG专家)
UIImageJPEGRepresentation
没有考虑图像在过去可能是如何压缩的,它只是压缩了当时的图像。
你提到了一张"来自用户库"的照片。用户可以在他们的库中有任何图像,在任何compressionQuality
压缩。
要尝试将图像保持在相同的文件大小,您需要知道它最初是如何保存的,即使使用相同的compressionQuality
,也可能会导致不同的文件大小。因为正在压缩的数据不同。
至于使用0.9的compressionQuality
保存图像,这取决于您对图像质量的重视程度,以及您想要使用的空间大小。0.7似乎经常被认为是一种良好的平衡。
我不确定iOS相机应用程序对图像的压缩程度(如果有的话),也不确定它是否能保证达到最佳质量。如果它使用0.9,你可以创建一个应用程序,在保存之前先拍摄照片并减少压缩。
我希望这能有所帮助。
FWIW,我使用AsJPEG()转换了相同的600x800图像,并进行了这些压缩,以查看大小&衡量可见的质量损失:
1.0:642KB
0.9:212KB
0.7:144KB
0.5:86KB
可见质量没有受到太大影响,即使是0.5(!)。我将在一个视觉完美度并不重要的网页上使用这些,所以我将使用0.5来获得小(13%)文件大小的好处
当然,您的里程数可能会有所不同:)
您可以将图像转换为PNG表示,以获得原始图像质量。
UIImagePNGRepresentation(image)