keep/copy 带有 libexif 的 XMP

keep/copy XMP with libexif

我尝试使用 libexif 为 JPEG 图片添加缩略图。 现在我从 exif(libexif 团队提供的命令行工具)借用代码。 但是我注意到 XMP 标签从元数据中删除了。有一个旧的错误报告 here

我试着看看如何使用 libexif 实现这一点,但我真的不明白如何从输入文件中获取 XMP 并将其放入输出文件中。我只想复制所有 XMP 数据,不需要提取任何内容。

我看到 exif_tag.h 中有一个标签 EXIF_TAG_XML_PACKET,但不知道如何 read/write 这个标签。

一个相关的解决方案是in this SO answer,但它看起来很复杂。我不熟悉 C 中的编码。

仅使用 libexif API 时是否真的可以保留所有 XMP?近年来情况有变化吗?你会如何用代码编写这个?

谢谢

我相信它应该有点直截了当。 ISO/Adobe 标准中描述了 XMP 字段。常规 Kotlin/Java/Android 文件 I/O 和一些字符串操作应该是所需要的。

我会首先熟悉 ISO 16684-1:2019。然后,为您的 jpeg 文件 class 编写一个获取所有 XMP 字段的方法。将这些字段存储在临时文件中(以防止在代码或 libexif 崩溃时难以恢复的数据丢失)。将文件交给 libexif。生成缩略图。最后,完成后您可以恢复 XMP 字段。如果缩略图也存储在 XMP 字段中(听起来确实如此),则将该字段与其他已经抓取的字段连接起来可能更容易,更新临时文件,使其包含每个 XMP 字段,然后再将所有 XMP 字段添加回 jpeg。

遗憾的是,我目前没有时间阅读 50 页的 ISO 标准,综合信息,然后编写代码来实现解决方案。这至少是一个 link 标准,可以帮助您入门。

https://www.iso.org/obp/ui/#iso:std:iso:16684:-1:ed-2:v1:en