JPEG文件字段

JPEG文件字段

JPEG编解码

目前有较多的图像编码标准,如jpeg、bmp、gif、png、webp、heif,我们这里先说jpeg部分,这个编解码标准诞生于20世纪90年代,JPEG标准仅仅说明定义了codec部分,也就是图片如何压缩为字节流以及重新解码为图片的过程,标准没有涉及到文件的存储格式。

1992年颁布了JPEG File Interchange Format(JFIF),目前在互联网上用的最多的jpeg格式,接着又出现了EXIF格式,主要用于数码产品,记录了媒体的时间地点信息。

JPEG文件由一系列字段组成,每个字段都有marker(标记),由0xff开头。

img

SOI 0xD8 图像开始
APP0 0xE0 JFIF应用数据块
APPn 0xE1 - 0xEF 其他的应用数据块(n, 1~15)
DQT 0xDB 量化表
SOF0 0xC0 帧开始
DHT 0xC4 霍夫曼(Huffman)表
SOS 0xDA 扫描线开始
EOI 0xD9 图像结束

图4 jpeg字段

(1)SOF marker(Start of Frame),这个字段定义了文件的起始

img

图5 SOF字段

(2)APP0(Application-specific),这个字段定义了JFIF格式

img

图6 APP0字段(定义JFIF格式)

(3)APPn(Application-specific),定义了其它格式,如APP1表示exif格式

img

图7 定义APPn字段

(4)DQT(Define Quantization Table(s)),定义了量化表

img

图8 字义量化表字段

一个或者多个量化表DQT(difine quantization table)

① 量化表长度(quantization table length)
② 量化表数目(quantization table number)
③ 量化表(quantization table)

下面以jpeg图的二进制数据来分析,通过vim打开后(:%!xxd切换到十六进制),ffd8表示start of image,ffe0表示app0,即是JFIF格式,0043前面的ffdb表示量化表(两个ffdb分别表示亮度和色度分量的量化表),0043表示量化表65字节(64byte量化参数 + 1 byte精度及量化表ID),ffc0表示start of frame,即图像数据:
帧图像开始SOF0(Start of Frame)

① 帧开始长度(start of frame length)
② 精度(precision),每个颜色分量每个像素的位数(bits per pixel per color component)
③ 图像高度(image height)
④ 图像宽度(image width)
⑤ 颜色分量数(number of color components)
⑥ 对每个颜色分量(for each component)

img

图9 jpeg字段分析

posted @ 2023-04-24 20:29  梁君牧  阅读(299)  评论(0)    收藏  举报