2

我正在使用 commons io 成像库将 xmp 元数据添加到 JPEG 文件。这就是我的做法:

   String xmpXml = "<dc:decription>some sample desc123</dc:description>";
   JpegXmpRewriter rewriter = new JpegXmpRewriter();
   rewriter.updateXmpXml(is,os, xmpXml);

在上面的文件上运行exiftool会显示从上面创建的 xmp 数据:

$ exiftool 167_sample.jpg | grep "Description"
Description                  : some sample desc123

但是,使用元数据提取器我无法Description从上面读取标签:

Metadata metadata = com.drew.imaging.ImageMetadataReader.readMetadata(file.inputStream) 
for (XmpDirectory xmpDirectory : metadata.getDirectoriesOfType(XmpDirectory.class)) {
    XMPMeta xmpMeta = xmpDirectory.getXMPMeta();
    XMPIterator itr = xmpMeta.iterator();
    while (itr.hasNext()) {
        XMPPropertyInfo property = (XMPPropertyInfo) itr.next();
        System.out.println(property.getPath() + ": " + property.getValue());
    }
}

更有趣的是,可以在创建xmp标签metadata-extractor Description读取标签exiftool

$ exiftool -xmp-dc:description=Manuallyaddedthis 167_sample.jpg

Metadata metadata = com.drew.imaging.ImageMetadataReader.readMetadata(new File ("167_sample.jpg")) 
for (XmpDirectory xmpDirectory : metadata.getDirectoriesOfType(XmpDirectory.class)) {
    XMPMeta xmpMeta = xmpDirectory.getXMPMeta();
    XMPIterator itr = xmpMeta.iterator();
    while (itr.hasNext()) {
        XMPPropertyInfo property = (XMPPropertyInfo) itr.next();
        System.out.println(property.getPath() + ": " + property.getValue());
    }
}
4

1 回答 1

0

metadata-extractor 为您附加到此问题的(第二个,“不干胶标签”)图像产生错误:

错误:处理 XMP 数据时出错:XML 解析失败

进一步看,XMP XML 似乎只包含以下内容:

<dc:description>some sample description</dc:description>

在您发布的代码的第一行中,原因很清楚。

这不是有效的 XMP 文档。Adobe 的 XMPCore 库不接受它。

您可能希望使用 XMPCore 库来生成有效的 XMP 文档。或者,添加相关的父标签。

于 2016-10-27T21:24:31.730 回答