AndroidX ExifInterface может считывать марку / модель камеры, но не марку / модель объектива.
Я создаю приложение, которое считывает данные EXIF с изображений и накладывает эти данные на изображение, чтобы вы могли поделиться настройками камеры с красивой графикой, а не вводить их вручную (например: "F/1,4 при 1/200 ISO400")
я использую AndroidX ExifInterface 1.1.0-beta01
а код продувки работает, чтобы получить все данные, кроме LensMake и LensModel, всегда равных нулю.
Я пытался вернуться к ExifInterface 1.0.0
и это не имело значения, он по-прежнему ведет себя идентично.
Я отмечаю, что документация для ExifInterface ссылается на LensMake и LensModel как на возвращающую "строку ASCII", в которой производитель камеры и модель камеры просто возвращают "строку", поэтому я безуспешно пробовал разные варианты getAttribute.
Эти точные файлы отлично работают в версии приложения для iOS, которую я ранее создал, и я пробовал файлы с нескольких разных камер (Fuji X-T3, Canon 5D III).
var stream: InputStream? = null
try {
stream = contentResolver.openInputStream(uri)
val exifInterface = ExifInterface(stream!!)
FS = exifInterface.getAttribute(ExifInterface.TAG_F_NUMBER)!!
SS = exifInterface.getAttribute(ExifInterface.TAG_EXPOSURE_TIME)!!
ISO = exifInterface.getAttribute(ExifInterface.TAG_PHOTOGRAPHIC_SENSITIVITY)!!
val LensMake = exifInterface.getAttribute(ExifInterface.TAG_LENS_MAKE) //THIS APPEARS TO BE ALWAYS NULL :(
val LensModel = exifInterface.getAttribute(ExifInterface.TAG_LENS_MODEL) //THIS APPEARS TO BE ALWAYS NULL :(
val CameraMake = exifInterface.getAttribute(ExifInterface.TAG_MAKE)
val CameraModel = exifInterface.getAttribute(ExifInterface.TAG_MODEL)
}
Я хотел бы иметь возможность читать информацию об объективах, я знаю, что она есть в файле, но эта библиотека, похоже, не хочет ее раскрывать.
1 ответ
В системе отслеживания проблем есть открытая ошибка, в которой говорится, что:
Хотя константы доступны для LensMake и LensModel, метод получения не возвращает фактические значения из файла. Похоже, что надлежащая поддержка отсутствует. Я думаю причина в том что
ExifTag[] IFD_EXIF_TAGS
не содержит элемента массива для марки и модели объектива. Добавление следующих строк в нужное место вышеупомянутого массива, кажется, исправляет ситуацию:
new ExifTag(TAG_LENS_MAKE, 42035, IFD_FORMAT_STRING),
new ExifTag(TAG_LENS_MODEL, 42036, IFD_FORMAT_STRING),
Не уверен, насколько это надежно, но это, по крайней мере, подход к решению.