Exiv2 不会将 XMP 保存到图像中。 image->writeMetaData() 不写入元数据。我的错误在哪里?

Exiv2 won't persist XMP to an image. image->writeMetaData() writes no metadata. Where is my error?

当我尝试将 XMP 元数据添加到使用 exiv2 作为库的文件时,它就是不会坚持。执行我的代码后,文件被修改,但大小没有改变,也不包含 XMP 元数据。以下代码是我的测试用例。

string fileName = "test.png";
vector<string> keyWords;
keyWords.push_back("keyword 1");
keyWords.push_back("keyword 2");
Exiv2::XmpParser::initialize();
image = Exiv2::ImageFactory::open(fileName);
assert(image.get() != 0);
assert(image->good());
image->readMetadata();
Exiv2::XmpData& xmpData = image->xmpData();
Exiv2::Value::AutoPtr subjects = Exiv2::Value::create(Exiv2::xmpBag);
for each (auto kw in keyWords)
    subjects->read(kw);
xmpData.add(Exiv2::XmpKey("Xmp.dc.subject"), subjects.get());
image->writeMetadata();

我使用预编译的命令行工具进行了相同的尝试。

exiv2 -v -k -m addxmp.txt mo test.png
File 1/1: test.png
Add Xmp.dc.subject "keyword1" (XmpBag)

我翻遍了原始来源,但没有发现任何区别。 我没看到什么?

我是 运行 VS2019 Windows 10,这是一个 Cmake 项目,它管理它与 vcpkg 的依赖关系。 exiv2 通过 vcpkg 安装。

如果您将 exiv2 库与 vcpkg 一起使用并且需要 XMP 支持,请确保像这样安装它,不要忘记括号中的 xmp...

vcpkg install exiv2[xmp]:x64-windows