JPEG 文件格式解析
JPEG 文件使用的数据存储方式有多种。最常用的格式称为 JPEG 文件交换格式(JPEG File Interchange Format,JFIF)。而 JPEG 文件大体上可以分成两个部分:标记码(Tag)和压缩数据。
标记码由两个字节构成,其前一个字节是固定值 0xFF
,后一个字节则根据不同意义有不同数值。在每个标记码之前还可以添加数目不限的无意义的 0xFF
填充,也就说连续的多个 0xFF
可以被理解为一个 0xFF
,并表示一个标记码的开始。而在一个完整的两字节的标记码后,就是该标记码对应的压缩数据流,记录了关于文件的诸种信息。
常用的标记有 SOI
、APP0
、APPn
、DQT
、SOF0
、DHT
、DRI
、SOS
、EOI
。
注意,SOI
等都是标记的名称。在文件中,标记码是以标记代码形式出现。例如 SOI
的标记代码为 0xFFD8
,即在 JPEG 文件中的如果出现数据 0xFFD8
,则表示此处为一个 SOI
标记。
标记 | 标记代码 | 描述 |
---|---|---|
SOI | 0xD8 | 图像开始 |
APP0 | 0xE0 | JFIF应用数据块 |
APPn | 0xE1 - 0xEF | 其他的应用数据块(n, 1~15) |
DQT | 0xDB | 量化表 |
SOF0 | 0xC0 | 帧开始 |
DHT | 0xC4 | 霍夫曼(Huffman)表 |
DRI | 0xDD | 差分编码累计复位的间隔 |
SOS | 0xDA | 扫描线开始 |
EOI | 0xD9 | 图像结束 |