Библиотека Java для чтения и записи метаданных IPTC в форматы JPEG и TIFF.


Кто-нибудь знает какую-нибудь библиотеку Java с открытым исходным кодом для чтения и записи метаданных IPTC в JPEG и TIFF? Сейчас я использую Apache Sanselan. К сожалению, он может только читать IPTC, а не записывать (http://commons.apache.org/sanselan/formatsupport.html).
Будем очень признательны за помощь.
Денис.


person stormdb    schedule 03.10.2010    source источник
comment
здесь есть новый выбор - он может читать, записывать IPTC, EXIF, ADOBE, ICCProfile, миниатюры и т. д.   -  person dragon66    schedule 05.02.2015


Ответы (6)


Кажется, это довольно старый вопрос, но ниже приведена некоторая полезная информация:

чтение метаданных, таких как EXIF, IPTC и т. д., может быть выполнено с помощью Apache Commons Imaging (ранее Sanselan) или средства извлечения метаданных (от Draw Noaks).

запись метаданных может быть выполнена с помощью Apache Commons Imaging с использованием следующих классов:

EXIF – ExifRewriter (http://commons.apache.org/proper/commons-imaging/apidocs/org/apache/commons/imaging/formats/jpeg/exif/ExifRewriter.html)

IPTC — JpegIptcRewriter (http://commons.apache.org/proper/commons-imaging/apidocs/org/apache/commons/imaging/formats/jpeg/iptc/JpegIptcRewriter.html)

XMP — JpegXmpRewriter (http://commons.apache.org/proper/commons-imaging/apidocs/org/apache/commons/imaging/formats/jpeg/xmp/JpegXmpRewriter.html)

person dev009    schedule 22.07.2014
comment
Кстати, известна ли дата выпуска Commons Imaging? - person Riduidel; 01.09.2014
comment
Да, 12 января 2015 ;) - person eruiz; 09.03.2015

Взгляните на IIM4J. Используйте IIMWriter для записи IIM-тегов IPTC в изображения (jpeg).

person Ben Asmussen    schedule 31.10.2011
comment
Добро пожаловать в SO и спасибо за ответ на вопрос двухлетней давности! :-) - person Don Question; 08.11.2012

В Apache Commons Imaging (ранее sanselan) добавлена ​​поддержка записи метаданных IPTC в код репозитория svn для своих следующий выпуск. Я проверил, что это так в последнем коде магистрали, извлеченном из репозитория svn. Код кажется стабильным, поэтому я надеюсь, что релиз не за горами. Для моего проекта этого достаточно.

person Farrukh Najmi    schedule 26.06.2012
comment
Я действительно использовал эту библиотеку в проекте, и она работала для меня. Вы можете найти тесты (например, здесь massapi.com/class/jp/JpegImageParser.html) - person Duralumin; 19.02.2013

Я искал себя в прошлом, но не нашел. Я бы посоветовал рассмотреть проект с открытым исходным кодом, такой как http://sourceforge.net/projects/image-tagger/ и посмотреть, как они это делают.

person samblake    schedule 05.10.2010
comment
Насколько я понимаю, Image-tagger использует ExifTool, который написан на Perl и требует установленного Perl, верно? Если да, то в моем случае это не подходит, так как мое приложение должно опираться только на установленную JRE. - person stormdb; 06.10.2010

Я думаю, что для чтения метаданных вам следует взглянуть на "metadata-extractor" - Проект с открытым исходным кодом (лицензия Apache 2.0), который разрабатывает библиотеку Java для чтения метаданных из файлов изображений.

На данный момент этот проект может получить доступ к следующим метаданным изображений:

  • Exif
  • IPTC
  • XMP
  • JFIF / JFXX
  • ICC-профили
  • Поля фотошопа

"извлекатель метаданных" размещен по адресу код Google.

Вот небольшой простой пример кода для версии 2.4.0:

public void example() throws Exception {
    File jpegFile = new File("yourJpgFile.jpg");
    Metadata metadata = ImageMetadataReader.readMetadata(jpegFile);

    Iterator directory = metadata.getDirectoryIterator();
    while (directory.hasNext()) {
        Object tag = directory.next();
        if (tag instanceof ExifDirectory) {
            Iterator tags = ((ExifDirectory) tag).getTagIterator();
            while (tags.hasNext()) {
                System.out.println("EXIF: "+tags.next().toString());
            }
        } else if (tag instanceof IptcDirectory) {
            Iterator tags = ((IptcDirectory) tag).getTagIterator();
            while (tags.hasNext()) {
                System.out.println("IPTC: "+tags.next().toString());
            }
        } else if (tag instanceof JpegDirectory) {
            Iterator tags = ((JpegDirectory) tag).getTagIterator();
            while (tags.hasNext()) {
                System.out.println("JPEG: "+tags.next().toString());
            }
        } else {
            System.err.println(tag.getClass());
        }           
    }
}
person Erik    schedule 13.09.2011
comment
Как я уже сказал, мне нужна библиотека для чтения и записи метаданных. Экстрактор метаданных поддерживает только чтение. - person stormdb; 14.09.2011

Еще одна библиотека с подробной документацией: https://docs.groupdocs.com/display/metadatajava, соответствует IIMV4.2

person Jochen Gebsattel    schedule 10.06.2020