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 line) также поддерживается, и включить его поддержку так же просто, как создать свой экземпляр ExifTool следующим образом:
ExifTool tool = new ExifTool(Feature.STAY_OPEN);
Документация по как использовать класс ExifTool обширен и охватывает все: от проектирования до производительности и безопасности потоков.
В дополнение к простому использованию ExifTool из Java, класс применяет значительное количество мер предосторожности, чтобы минимизировать проблемы времени выполнения, а также правильно перехватить и отловитьсообщать обо всех и любых ошибках, которые могут возникнуть хорошо документированными способами (вместо того, чтобы неожиданные исключения всплыли из основных классов Java).
Я был настолько педантичен с этой обработкой исключений и восстановлением ошибок, потому что класс предназначен дляпозволяют использовать ExifTool в среде высокой доступности, например в загруженном веб-приложении.Я не просто хотел обернуть простые объекты процесса, а затем поднять руки вверх, если что-то взорвалось.Я знал, что сам (и любой другой, использующий этот класс) будет нуждаться в хорошо спроектированном API для легкого восстановления после ошибок.
Например, попытка использовать ExifTool в режиме демона приведет к тому, что класс фактически проверит базовую установкуExifTool для поддержки этой функции и выдает исключение UnsupportedFeatureException с рекомендациями о том, как обойти проблему, если она не поддерживается.
В дополнение к проверке предварительного условия, чтобы гарантировать использование класса (а именно в режиме демона) не пропускает собственные процессы ОС, а также потоки ввода / вывода, используемые для связи с ними, класс обеспечивает поток автоочистки, который после указанного интервала бездействия (по умолчанию 10 минут) аккуратно отключит внешний процесс и потоки чтения / записи, делая простой экземпляр ExifTool легким и удобным для повторного использования.
Все ресурсы повторно инициализируются при следующем вызовекласс для анализа большего количества метаданных, так что яНет необходимости выбрасывать и заново создавать новые экземпляры.Также поток очистки выполняется только после длительных периодов бездействия, а не по заданному расписанию.Вы можете установить интервал на любое значение или полностью отключить поток очистки и управлять очисткой самостоятельно (просто вызовите close ()).
Все эти проекты являются частью моей конечной цели интеграции ExifTool в Javaприложение бесшовное, производительное и простое.
Вы можете проверить главную страницу проекта для получения дополнительной информации о проекте, использовании, источнике, ссылках для скачивания и т. д., или вы можете перейти прямо к GitHub и посмотрите код, если хотите.