0

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

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

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

我注意到 ExifInterface 的文档将 LensMake 和 LensModel 称为返回一个“ASCII 字符串”,而 Camera Make 和 Camera Model 只返回一个“字符串”,所以我尝试了不同的 getAttribute 变体但没有成功。

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

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

4

1 回答 1

1

问题跟踪器上有一个未解决的错误,其中指出:

虽然常量可用于 LensMake 和 LensModel,但 getter 不会从文件中返回实际值。似乎缺少适当的支持。我认为原因是ExifTag[] IFD_EXIF_TAGS不包含镜头品牌和型号的阵列项目。在上述数组的正确位置添加以下行似乎可以解决问题:

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

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

于 2019-09-29T21:27:07.613 回答