在过去的几个小时里,我一直试图了解 XMP 元数据是如何处理 PNG 文件的,但我无法完全理解它。
如果我用 Photoshop 创建一个 PNG 图像,保存它并打开文件信息对话框(文件 > 文件信息或 Ctrl+Alt+Shift+I),我可以看到一些 XMP 属性,如CreateDate
,CreatorTool
或ModifyDate
.
现在,如果我尝试使用 exiv2 打开文件并读取元数据,它似乎什么也找不到:
auto image = Exiv2::ImageFactory::open(imagePath);
image->readMetadata();
Exiv2::XmpData &xmpData = image->xmpData();
exiftool -xmp:all myImage.png
,exiv2 -P X myImage.png
甚至 GIMP 也是如此(但我认为它在内部使用 exiv2)。
如果在使用 Photoshop 再次保存时未删除任何添加的元数据,则不会出现这样的问题。如果不清楚,打开图像并使用 exiv2 添加 XMP 元数据,保存它,在 Photoshop 和文件信息对话框中打开图像,之前添加的属性不再存在。
奇怪的是,如果您使用 JPEG 图像执行整个过程,一切都会按预期工作:所有属性都可以从 Photoshop 和 exiv2 中看到,如果我尝试使用 exiv2 添加元数据(使用相同的代码),它会出现在Photoshop 也是如此。
我错过了一些明显的东西吗?对于 JPEG,PNG 有什么特别之处吗?我还没有尝试使用Adobe 的 SDK来编辑 XMP 数据,是不是更好?
任何帮助将不胜感激,因为这开始让我发疯:/
编辑:阅读这篇文章后,我尝试使用 Adobe Bridge,但它似乎没有显示与 Photoshop 相同的属性。如果我使用 Exiv2 添加 XMP 元数据,它们会显示在 Bridge 中,但如果我在 Photoshop 中修改图像,元数据会再次从 Bridge 中消失。