Мне нужно иметь возможность обновлять метаданные изображения (а именно, теги, создатель, описание, комментарии) и делать это в обычных Exif и XMP.Скорее всего, я буду читать Exif и писать XMP.
После долгих поисков библиотеки, которая работает ТАКЖЕ для записи, я натолкнулся на двенадцать обезьян.
https://github.com/haraldk/TwelveMonkeys
Это казалось многообещающим.И действительно, без особых усилий я уже смог прочитать Exif, содержащий описание в одном из моих изображений.Заметьте, не со стандартным API-интерфейсом javax, а с API-интерфейсом с двенадцатью обезьянами.Я не против.Что бы ни работало!
В этот момент я был рад избегать стандартного API в максимально возможной степени, поскольку он казался ужасно запутанным и неэффективным.Я начал с чтения в моем Exif и написания кода для моей проверки концепции.Идея заключалась в том, что наиболее эффективным способом достижения того, чего я хочу (быстрое и безопасное изменение метаданных в файлах JPEG), было выполнение следующих шагов:
- Считывание всех сегментов в список
- Найти сегмент, который нужно изменить
- Сделать это изменение
- Записать все сегменты последовательно во временный файл
- Если все идет хорошо, переименуйте оригинал в более позднее безопасное имяудалите, переименуйте копию в исходное имя и, наконец, удалите оригинальный файл.
Однако я был немного встревожен, когда обнаружил, что, похоже, нет реализации
com.twelvemonkeys.imageio.metadata.Directory
, который реализует методы
add(Entry)
и
remove(Object)
с чем-либо, кроме
throw new UnsupportedOperationException("Directory is read-only");
Если это не способ эффективно (и безопасно) достичь того, что я хочу сделать ... У кого-нибудь есть предложение о том, как на чистой Java я могу это сделать?