JPEG 不是一种文件格式。两种主要格式是 JFIF 和 Exif。维基百科页面日语FIF说:
JFIF 与较新的可交换图像文件格式 (Exif) 互相不兼容。
虽然这两种格式非常相似,但是什么原因导致不兼容?
答案1
如果您希望 100% 符合规范,JFIF 和 Exif 是不兼容的。实际上,它们可以混合在一个文件中。这是因为不兼容是由两个规范中的一个细节引起的,如果您将它们混合在一起,那么这个细节并不重要。
两种格式的文件具有相同的结构:
- 图像标记的开始:
FF D8
- 任意数量的段:
- 2字节段类型标识符
- 2 字节段长度(不包括标识符字节)
- 分段数据
- 扫描标记开始:
FF DA
- 图像数据
- 图像结束标记:
FF D9
两种格式的图像数据相同。段类型、其标识符和内容结构在很大程度上是相同的。其他段对于其中一种格式是唯一的,不使用另一种格式的标识符,因此也不存在不兼容问题。问题是 JFIF 要求文件中的第一个段为FF E0
,而 Exif 要求FF E1
。因此,如果文件符合其中一种规范,它就会自动不符合另一种规范。
我已经有一段时间没有玩 JPEG 了,但上次我检查时发现,我检查过的所有使用 JPEG 的软件都只是忽略了它无法识别的片段。因此,如果某个程序(例如)假设某个文件是 Exif,因为它以一个FF E1
片段开头,它要么仍然读取并识别FF E0
(不是很有用,因为它会重复来自 的信息),要么跳过它。如果程序无法识别FF E1
所有片段,则应根据规范忽略它们。FF Ex