Я работаю над программой просмотра фотографий. В этом контексте я написал небольшой класс, чтобы читать и использовать некоторые данные EXIF, например. ориентация изображения. Этот класс хорошо работает для чтения.EXIF и миниатюры
Однако, я бы добавил новый вариант для поворота фотографий. Я хочу повернуть и написать сами фотоданные, а не просто переписать тег ориентации. Я уже написал код для поворота и сохранения основного изображения в формате JPEG, и он работает хорошо. Но мне также нужно повернуть миниатюру, содержащуюся в данных EXIF, если таковые имеются, чтобы сохранить изображение согласованным. По этой причине мне нужно записать данные EXIF, чтобы заменить существующий эскиз.
Но это вызывает некоторые вопросы, которые я некоторые проблемы отвечая, а именно:
- Может данные EXIF содержит более 1 миниатюру, и если да, то рассчитывать максимальный эскиз, что изображение может содержат?
- Какие поддерживаемые форматы для эскизов? (Я нашел JPEG и TIFF, есть ли другие?)
- Есть ли какая-либо гарантия в стандартах EXIF, что миниатюры всегда записываются в конце данных EXIF, непосредственно перед основным изображением?
- Если нет, то теги, содержащие смещение, указывающее на место за пределами уменьшенного изображения, должны быть обновлены. Итак, существует ли стандартный способ повторения всех тегов и подкаталогов, чтобы распознавать, какие теги EXIF содержат смещения, и, если необходимо, обновлять их? Или единственный способ прочитать максимум тегов и переписать только те, которые известны?
- Или есть способ гарантировать, что размер недавно повернутого миниатюры будет меньше или равен предыдущему размеру эскиза для замены?
С уважением
См. Также: http://www.exif.org/Exif2-2.PDF. Обратите внимание, что согласно спецификации первый маркер APPn должен быть маркером APP1/Exif. Хотя принято считать, что первый APPn является маркером APP0/JFIF для совместимости с JFIF. Может быть только один маркер APP1/Exif и только один миниатюра (в IFD1). Эскиз может быть несжатым (RGB или YCbCr) или JPEG (хотя я никогда не видел нисходящую миниатюру YCbCr), а не LZW или другой. И строго, формат контейнера - JIF (не JFIF), но это ничто. В противном случае, отличный ответ. :-) – haraldK
@haraldK спасибо за ссылку doc. Мой вопрос об упоминании LZW заключался в том, что он хочет что-то сделать вне стандарта, поэтому, если он не будет следовать стандарту, он может поместить любые данные, которые он хочет. – BitBank