0

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

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

我看到exif_t​​ag.hEXIF_TAG_XML_PACKET中有一个标签,但不知道如何读/写这个标签。

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

仅使用 libexif API 时实际上可以保留所有 XMP 吗?近年来情况有变化吗?你会怎么用代码写这个?

谢谢

4

1 回答 1

0

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

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

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

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

于 2022-02-06T17:58:15.947 回答