'Corrupt' Android Camera-X 上的 Exif 数据

'Corrupt' Exif data on Android Camera-X

我一直在测试向 Android 的新 Camera X 库的迁移,并使用 exif $FILE 检查 EXIF 数据。 显示了一些属性,但值的数量似乎被截断并且显示错误:

Corrupt data
The data provided does not follow the specification.
ExifEntry: The tag 'ExifVersion' contains data of an invalid format ('ASCII', expected 'Undefined').

使用 Camera 2 来自同一设备的照片 API 将显示所有值并将 Exif 版本列为:

Exif Version | Exif Version 2.2

我认为这是 Camera X 损坏数据的错误,但我只是尝试使用 exiftool 读取它并且它正确显示了所有字段。在两个相机库 (CameraX/Camera2) 上,Exif 版本显示为:

Exif Version : 0220

我在多个设备上都遇到过这种情况,例如一个 Samsung Galaxy A01 CORE SM-A013M and a Nokia 8.1

尝试使用谷歌搜索来自 exif 的有关格式无效的错误消息,但找不到任何内容。

这是 Camera X、Exif 或两者的错误吗?还是我可以安全地忽略它? (假设我确实需要有效的 Exif 数据 :))

错误消息是正确的:标签 0x9000“ExifVersion”只能使用 UNDEFINED 类型

但是任何消费者仍然可以支持其他数据类型,例如 ASCII - 如果 exiftool 没有产生错误,那么很可能是为了您的方便,而在同时您没有意识到遇到了违反标准的情况。

作者产生了这个错误:如果遵循标准 UNDEFINED 作为必须使用的数据类型,没有别的。两种数据类型之间的一个主要区别是:一种带有终止字节,另一种则没有。同样,使用没有终止字节的 ASCII 也是一个错误 - 在字段“ExifVersion”上,当字段长度定义为恰好 4 个字节时,不可能用所需的终止字节编写文字 0220已经。

实际上差异并不重要:

  • 我将二进制 0x30 0x32 0x32 0x30 解释为 4 个字节(根据数据类型 UNDEFINED)或
  • 文字 0220(有或没有终止符 0x00,根据数据类型 ASCII)。

即使我作为消费者仍然能够阅读它,尽管遵循了标准,但它不应该被忽视。这有点像在红灯亮时过马路:它可能在某些条件下有效,但这并不能使它正常。