AndroidX ExifInterface 可以读取相机 make/model 但不能读取镜头 make/model

AndroidX ExifInterface can read camera make/model but not lens make/model

我正在构建一个应用程序,它可以从图像中读取 EXIF 数据并将该数据叠加在图像上,这样您就可以通过漂亮的图形共享您的相机设置,而不是手动输入它们(例如:"F/1.4 at 1/200 ISO400")

我正在使用 AndroidX ExifInterface 1.1.0-beta01 并且打击代码可以获取除 LensMake 和 LensModel 始终为空之外的所有数据。

我已经尝试恢复到 ExifInterface 1.0.0 并且没有任何区别,它的行为仍然相同。

我注意到 ExifInterface 的文档将 LensMake 和 LensModel 称为 returning an "ASCII String" which Camera Make and Camera Model just return a "String" 所以我尝试了 getAttribute 的不同变体但没有成功。

这些确切的文件在我之前构建的 iOS 版本的应用程序上运行良好,并且我尝试了来自多个不同相机(富士 X-T3、佳能 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)
}

我希望能够读取镜头信息,我知道它在文件中,但这个库似乎不想公开它。

问题跟踪器上有一个公开的 bug 文件,其中指出:

Although the constants are available for LensMake and LensModel, the getter does not return the actual values from the file. It seems like proper support is missing. I think the reason is that ExifTag[] IFD_EXIF_TAGS does not contain an array item for lens make and model. Adding the following lines at the right place of the aforementioned array, seems to fix things:

new ExifTag(TAG_LENS_MAKE, 42035, IFD_FORMAT_STRING),
new ExifTag(TAG_LENS_MODEL, 42036, IFD_FORMAT_STRING),

不确定这有多可靠,但这至少是一种解决方法。