Java api для exiftool

Мне интересно разобрать результат exiftool с помощью java api или чего-то в этом роде.

Я исследовал, но не нашел ни одного примера. Например, как я могу получить эти результаты в своем java-проекте?

Номер версии ExifTool: 8.22

Имя файла: ExifTool.jpg

Каталог: файл t / images

Размер: 24 КБ Дата / время изменения файла

И т. Д. Я ищу «как» или что-то в этом роде.


person Blanca Hdez    schedule 11.06.2010    source источник


Ответы (3)


ExifTool (для Java) разработан как простая в использовании и надежная Java-абстракция ExifTool Фила Харви. Я только что выпустил первый общедоступный релиз на прошлой неделе после того, как некоторое время инкубировал проект под зонтиком проекта imgscalr.

Проект находится под коммерческой лицензией Apache 2.

Моя цель для библиотеки заключается не только в том, чтобы абстрагироваться от кода выполнения внешнего процесса от вызывающей стороны (как это, кажется, делают большинство других уровней абстракции), но и в том, чтобы на самом деле разработать оболочку, настолько тесно интегрированную и устойчивую (я поясню, что я означает здесь позже), что вы обрабатываете экземпляры своего класса ExifTool точно так же, как если бы сам ExifTool был написан на Java.

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

File image = // path to some image
ExifTool tool = new ExifTool();

Map<Tag, String> valueMap =
    tool.getImageMeta(image, Tag.GPS_LATITUDE, Tag.GPS_LONGITUDE);

System.out.println("Lat: " + valueMap.get(Tag.GPS_LATITUDE) +
    "\tLong: " + valueMap.get(Tag.GPS_LONGITUDE));

Также поддерживается использование ExifTool в новом «режиме демона» (строка -stay_open True cmd), и включить его поддержку так же просто, как создать экземпляр ExifTool следующим образом:

ExifTool tool = new ExifTool(Feature.STAY_OPEN);

Документация по как использовать класс ExifTool является обширным, охватывающим все, от дизайна до производительности и безопасности потоков.

В дополнение к использованию ExifTool simple из Java, класс применяет значительное количество мер предосторожности, чтобы минимизировать проблемы во время выполнения, а также правильно выявлять и сообщать обо всех ошибках, которые могут возникнуть, хорошо задокументированными способами (вместо того, чтобы позволять неожиданным исключениям всплывать. из основных классов Java).

Я был очень педантичен с этой обработкой исключений и восстановлением ошибок, потому что класс разработан, чтобы позволить вам использовать ExifTool в среде с высокой доступностью, такой как загруженное веб-приложение. Я не просто хотел обернуть простые объекты Process, а затем поднять руки вверх, если что-то взорвется. Я знал, что мне (и всем, кто использует этот класс) понадобится хорошо спроектированный API, позволяющий легко восстанавливать ошибки.

Например, попытка использовать ExifTool в режиме демона приведет к тому, что класс фактически проверит базовую установку ExifTool на предмет поддержки этой функции и выдаст исключение UnsupportedFeatureException с рекомендациями о том, как обойти проблему, если она не поддерживается.

В дополнение к проверке предварительных условий, чтобы гарантировать, что использование класса (а именно в режиме демона) не допускает утечки собственных процессов ОС, а также потоков ввода / вывода, используемых для связи с ними, класс предоставляет поток автоматической очистки, который после указанного интервала бездействия (по умолчанию - 10 минут) будет корректно завершать внешний процесс и потоки чтения / записи, что делает бездействующий экземпляр ExifTool легким и легким для повторного использования.

Все ресурсы повторно инициализируются при следующем вызове класса для анализа большего количества метаданных, поэтому нет необходимости выбрасывать и повторно создавать новые экземпляры. Кроме того, поток очистки выполняется только после продолжительных периодов бездействия, а не по установленному расписанию. Вы можете установить интервал, какой захотите, или полностью отключить поток очистки и самостоятельно управлять очисткой (просто вызовите close ()).

Все эти разработки являются частью моей конечной цели - сделать интеграцию ExifTool в приложение Java бесшовной, производительной и простой.

Дополнительную информацию можно найти на главной странице проекта информацию о проекте, использовании, источнике, ссылках для скачивания и т. д., или вы можете перейти прямо к GitHub и посмотреть через код, если хотите.

person Riyad Kalla    schedule 21.08.2011
comment
@ chinna_82 это зависит от исходного изображения - если вы посмотрите на исходный код ExifTool для Java, TITLE определяется как поиск данных тега XPTitle, а KEYWORDS (обратите внимание на 'S') ищет тег XPKeywords - вы хотите убедитесь, что в исходном изображении есть эти данные, чтобы это работало. Если вам нужно найти другие теги, вы можете создать вилку кода, определить новые типы ENUM и использовать этот класс. Если это сработает для вас, отправьте запрос на перенос обратно в проект, я рассмотрю его и приму. - person Riyad Kalla; 14.06.2014
comment
Может ли он поддерживать файлы, отличные от файлов изображений ... например, файл AI или файл PSD - person chinna_82; 16.06.2014
comment
ExifTool для Java оборачивает собственный exiftool и выполняет набор тегов для исходного файла - если exiftool Фила поддерживает файл, то ExifTool для Java поддерживает его. (вкратце: да) - person Riyad Kalla; 17.06.2014
comment
Текущая активно поддерживаемая версия инструмента находится по адресу github.com/mjeanroy/exiftool. - person Violaman; 05.08.2019
comment
@RiyadKalla сильно оценил ваши усилия, когда я посетил исходный код, мне показалось, что код (или даже код библиотеки, такой как im4Java) сильно зависит от наличия exifTool на хост-машине. Я имею в виду, что если ExifTool отсутствует на платформе, на которой выполняется код, этот код не может получить теги метаданных, что делает его зависимым от платформы. Есть ли другой способ читать теги метаданных? Примечание: я использовал библиотеку изображений apache Commons для удаления тегов метаданных, но после удаления я также могу видеть теги через exifTool. - person kAmol; 15.02.2021
comment
Мета изображения @kAmol очень сложна и со временем различается от поставщиков и версий - лучшего проверенного в боевых условиях инструмента, чем ExifTool, нет - попытка воссоздать такую ​​же надежную реализацию, родную для Java, потребует много лет. Вот почему моя библиотека помогает упростить использование ExifTool непосредственно в приложении Java - это слишком хорошо, чтобы игнорировать. - person Riyad Kalla; 16.02.2021

Проверьте ответ на форуме ExifTool:

http://u88.n24.queensu.ca/exiftool/forum/index.php/topic,2697.0.html

person Phil Harvey    schedule 11.06.2010

Я не знаю exiftool, но раньше я использовал MediaUtil для чтения и записи тегов exif в java. (Я использовал его для автоматического поворота изображений в формате jpeg)

person Sean Patrick Floyd    schedule 11.06.2010