文章目录
前奏
上次做了那个CTFBlink之后,对.jpg图片挺好奇的,于是准备来研究一下
jpg图片对比

jpg图片格式详解
JPEG图片格式组成部分:SOI(文件头)+APP0(图像识别信息)+DQT(定义量化表)+SOF0(图像基本信息)+DHT(定义Huffman表)+DRI(定义重新开始间隔)+SOS(扫描行开始)+EOI(文件尾)
JPEG文件的每个段都一定包含两部分一个是段的标识,它由两个字节构成:第一个字节是十六进制0xFF,第二个字节对于不同的段,这个值是不同的。

紧接着的两个字节存放的是这个段的长度(除了前面的两个字节0xFF和0xXX,X表示不确定。它们是不算到段的长度中)。
段的一般结构
| 名称 | 字节数 | 数据 | 说明 |
|---|---|---|---|
| 段标识 | 1 | FF | 每个新段的开始标识 |
| 段类型 | 1 | 类型编码(称作“标记码”) | |
| 段长度 | 2 | 包括段内容和段长度本身,不包括段标识和段类型 | |
| 段内容 | <=65533字节 |
段类型
| 段类型 | 标记码 | 说明 |
|---|---|---|
| SOI | D8 | 文件头 |
| EOI | D9 | 文件尾 |
SOF0 |
C0 | 帧开始(标准 JPEG) |
| SOF1 | C1 | 同上 |
| DHT | C4 | 定义Huffman表(霍夫曼表) |
| SOS | DA | 扫描行开始 |
| SOS | DB | 定义量化表 |
| DRI | D0 | 定义重新开始间隔 |
| APP0 | E0 | 定义交换格式和图像识别信息 |
| COM | FE | 注释 |
说明:有的文章也将DNL段(标记码=DC,定义扫描行数)列为必须段
PS:段类型有30种,但只有10种是必须被所以程序识别的,其它的类型都可以忽略
SOI文件头
JPEG文件的开始2个字节都是FF D8这是JPEG协议规定的
| 名称 | 字节数 | 值 |
|---|---|---|
| 段标识 | 1 | FF |
| 段类型 | 1 | D8 |
也就是这两个字节构成了JPEG文件头

APP0图像识别信息
APP0(图像识别信息)
| 名称 | 字节数 | 值 | 说明 |
|---|---|---|---|
| 段标识 | 1 | FF | |
| 段类型 | 1 | E0 | |
| 段长度 | 2 | 0010 | 如果有RGB缩略图就=16+3*n(以下为段内容) |
| 交换格式 | 5 | 4A46494600 | “JFIF”的ASCII码 |
| 主版本号 | 1 | ||
| 次版本号 | 1 | ||
| 密度单位 | 1 | 0=无单位;1=点数/英寸;2=点数/厘米 | |
| X像素密度 | 2 | 水平方向的密度 | |
| Y像素密度 | 2 | 垂直方向的密度 | |
| 缩略图X像素 | 1 | 缩略图水平像素数目 | |
| 缩略图Y像素 | 1 | 缩略图垂直像素数目 | |
| (如果“缩略图X像素”和缩略图Y像素的值均>0,那么才有下面的数据) | |||
| n=缩略图像素总数=缩略图X像素*缩略图Y像素 |
JFIF是JPEG File Interchange Forma的缩写,即JPEG文件交换格式,另外还有TIFF等格式,很少用- “如果有RGB缩略图就=
16+3*n”是什么意思呢?比如说“缩略图X像素”和“缩略图Y像素”的值均为48,就表示有一个48*48

本文深入解析JPEG图片格式的组成及各部分的作用,包括文件头、图像识别信息、量化表、图像基本信息等内容,并通过实例展示了JPEG的压缩编码过程。
最低0.47元/天 解锁文章
717

被折叠的 条评论
为什么被折叠?



