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