我已成功使用 CGImageSource 读取图像(主要是 JPEG)并使用 CGImageDestination 将其写回。它有效,但我的图像比以前小很多(3.9Mb 的图像将变成 2.1Mb 的图像)。
我一直在玩kCGImageDestinationLossyCompressionQuality虽然它确实影响文件的大小,但我不明白它使用的比例。
例如同一个 3.7Mb 文件的大小将更改为:
1.9Mb,压缩质量为0.7
2.4Mb,压缩质量为0.8
3.0Mb,压缩质量为0.9
7.4Mb,压缩质量为 1.0
我尝试了一切(使用二分法到小数点后 6 位)来找到回到神奇的 3.9Mb 的最佳位置,但它从 3.3Mb 跳到 7.4Mb,似乎没有办法让它保持在这两个数字之间.
是否有任何其他 Objective-C 库可以用来修改 EXIF 数据,而无需考虑压缩(以及文件大小)?
最佳答案
使用 CGImageDestination 您正在创建一个新图像,并且新创建的图像的大小很难与原始图像匹配。 (取决于压缩级别)。
如果您只需要修改原始图片中的元数据,而不更改图像信息,则应该使用其他库。我知道其中两个可以在 cocoa 应用程序中使用:
另一个选择是使用 exiftool 。它是一个 Perl 脚本,已成为更改元数据信息的事实上的标准。您可以将其包含在应用程序的资源文件夹中,并使用 NSTask 调用它来更改图片的元数据。非常容易做到,并且是迄今为止这三个工具中最好的工具。 (仅适用于 Mac,不确定您的目标是 iPhone 还是 Mac)
关于cocoa - 如何在Cocoa中修改EXIF数据而不压缩图像?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8024111/