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),

Не уверен, насколько это надежно, но это, по крайней мере, подход к решению.

Другие вопросы по тегам