Данные XMP, записанные из общих образов, не читаемых метаданными

Я использую общую библиотеку изображений для добавления метаданных 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());
    }
}

Более интересно, metadata-extractor МОЖЕТ прочитать Description тег, когда exiftool используется для создания тега xmp

$ 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());
    }
}

1 ответ

Извлечение метаданных выдает ошибку (второе, "самоклеющиеся этикетки") изображения, которое вы прикрепили к этой проблеме:

ОШИБКА: ошибка обработки данных XMP: ошибка синтаксического анализа XML

Глядя дальше, кажется, что XMP XML содержит только следующее:

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

В первой строке кода, который вы разместили, понятно почему.

Это не действительный документ XMP. Библиотека Adobe XMPCore не принимает его.

Вы можете использовать библиотеку XMPCore для создания действительного документа XMP. Или добавьте соответствующие родительские теги.

Другие вопросы по тегам