Данные 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. Или добавьте соответствующие родительские теги.