如何在不加载图像的情况下为文件系统上的现有图像写入或修改 EXIF 数据?
Posted
技术标签:
【中文标题】如何在不加载图像的情况下为文件系统上的现有图像写入或修改 EXIF 数据?【英文标题】:How to write or modify EXIF data for an existing image on the filesystem, without loading the image? 【发布时间】:2012-07-30 05:01:45 【问题描述】:我以前也问过类似的问题,但没有得到明确的答案。似乎必须有一种方法可以简单地向图像添加/修改元数据,而无需将图像加载到内存中,而无需处理直接读取位。
使用CMSampleBufferRef
s 时似乎存在一些方法,但我需要能够使用已保存到磁盘的常规图像来执行此操作。
例如,给定一个非常大的png
/Documents/photo.png
,我想修改它的 exif 元数据而不必加载该图像。
【问题讨论】:
相关:Is there any easy way to edit jpeg marker data in-place? 由于@H2CO3 可能为您提供了您可以使用的唯一解决方案(我没有),请接受他的回答。 还请注意,如果您不接受任何答案,您仍然无法取回赏金的价值。因此,如果您接受了其中一个答案,那只会对其中一位回答者有利。 :) 【参考方案1】:您可以使用 libexif - 我之前已经成功为 ios 编译过它。使用 libexif,您可以修改任何图像的 EXIF 元数据。
【讨论】:
可以,但是这个框架会先把图片加载到内存中吗? 那很好。您能否提供一个使用 libexif 的示例?即加载元数据并将其写回文件。 @akaru 这就是我在文件管理器应用中实现 EXIF 元数据读写的方式:github.com/H2CO3/MyFile/blob/master/src/… 顺便说一句,如果我的回答对您有帮助,我将不胜感激:) @EricBrochu(天啊,我两年前的代码太可怕了,我什至无法表达。看看那个链接的 if-else 和多余的本地malloc()
s,aaargh .. .!) 确实如此,但我不确定这是必须的。事实上,我很有信心这不是应该的。看到我那段代码的质量......我什至不认为我正确使用了库。【参考方案2】:
如果您知道如何修改 EXIF,则可以直接从文件中修改二进制数据。只需将图像中的二进制部分替换为新的部分。 我不知道objective-c 是否允许这样做,但在ansi c 中应该很简单。复杂的部分是确定要更改的确切部分。
【讨论】:
以上是关于如何在不加载图像的情况下为文件系统上的现有图像写入或修改 EXIF 数据?的主要内容,如果未能解决你的问题,请参考以下文章
在 iPhone / iPad 上,如何在不使用图像的情况下制作带有凹槽的 Button?
有没有办法在不将完整文件加载到内存的情况下将 tiff 图像转换为 Base64