【问题标题】:AndroidX ExifInterface can read camera make/model but not lens make/modelAndroidX ExifInterface 可以读取相机品牌/型号,但不能读取镜头品牌/型号
【发布时间】:2020-01-28 17:50:45
【问题描述】:

我正在构建一个应用程序,它可以从图像中读取 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)
}

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

【问题讨论】:

    标签: android androidx android-exifinterface


    【解决方案1】:

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

    虽然常量可用于 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),
    

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

    【讨论】:

      猜你喜欢
      • 2014-01-01
      • 2017-09-15
      • 2013-03-06
      • 2015-08-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-23
      • 1970-01-01
      相关资源
      最近更新 更多