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),
不确定这有多可靠,但这至少是一种解决方法。
我正在构建一个应用程序,它可以从图像中读取 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),
不确定这有多可靠,但这至少是一种解决方法。