一个JPEG的文件主要有以下几个部分构成:
简称 | 值(或标识) | 描述 |
---|---|---|
SOI | 0xFFD8 | 图像开始标识 |
APPn | 0xFFEn | 应用程序保留标识n(n的取值范围: 0~f)(至少1个) |
DQT | 0xFFDB | 量化表 |
SOF0 | 0xFFC0 | 帧图像开始 |
DHT | 0xFFC4 | 霍夫曼(Huffman)表 |
SOS | 0xFFDA | 扫描开始 |
DATA | None | 图像数据 |
EOI | 0xFFD9 | 图像结束标识 |
对于这些表(量化表
、霍夫曼表
)我也搞不懂是干什么的,如果想要了解还需自行查询,不过猜测这些都和JPEG的图像压缩相关。
APPn
APP0
JPEG文件交换格式(JPEG File Interchange Format,JFIF),这个应用程序保留标识是最常用,也是最常见的一种标识了,其主要格式如下:
字段 | 大小(bytes) | 值(或标识) | 描述 |
---|---|---|---|
APPP0标识 | 2 | 0xFFE0 | |
长度 | 2 | None | 除APP0标识 以外的段长度 |
标识符 | 5 | 0x4A46494600 | 转化成ASCII码就是"JFIF " |
JFIF版本号 | 2 | None | 主版本号和次版本号 |
密度单位 | 1 | None | 表示单个像素的单位(0~3) |
X轴像素密度 | 2 | None | |
X轴像素密度 | 2 | None | |
缩略图x轴像素 | 1 | None | |
缩略图x轴像素 | 1 | None | |
缩略图RBG位图 | 3n | None | 由RGB位图构成,其大小为3的倍数 |
注:
密度单位
其值表示如下:- 0:无单位
- 1:英寸
- 2:厘米
DQT
量化表,其主要目的是用于压缩JPEG文件的。
字段 | 大小(bytes) | 值(或标识) | 描述 |
---|---|---|---|
DQT标识 | 2 | 0xFFDB | |
长度 | 2 | None | 除DQT标识 以外的段长度 |
精度&量化表ID | 1 | None | 高4位: 精度(0~1),第4位:表ID(0~3) |
量化表 | None |
注:
精度
其值表示如下:- 0:表项的精度为8bits,也就是1byte表示一个单位量。
- 1:表项的精度为16bits,也就是2bytes表示一个单位量。
SOF0
帧开始,主要是图像的x、y轴数值(也就是分辨率)。
字段 | 大小(bytes) | 值(或标识) | 描述 |
---|---|---|---|
SOF0标识 | 2 | 0xFFC0 | |
长度 | 2 | None | 除SOF0标识 以外的段长度 |
精度 | 1 | None | 单个像素的位数 |
图像高度 | 2 | None | 单位: 像素 |
图像宽度 | 2 | None | 单位: 像素 |
颜色分量数量 | 1 | None | 指定颜色分量信息 的个数(1,3,4) |
颜色分量信息 | 3n | None | 大小为颜色分量数 的3倍 |
注:
精度
:这里的进度实际上指的就是RGB单个颜色的大小,常见的大小为8bits。颜色分量数量
:其值数量固定,主要用于指定图像显示方式,只可以选择以下其一:- 1:表示图像为灰度图
- 3:表示为YCrCb或YIQ(常用)
- 4:表示为CMYK
颜色分量信息
:主要指定单个颜色的信息,其又可以分为以下三个参数:- 颜色分量ID:1字节
水平/垂直采样因子:1字节
- 高4bits:水平采样因子
- 底4bites:垂直采样因子
- 量化表ID:1字节,指定当前使用的量化表ID(DQT)
DHT
哈夫曼(Huffman)表,同样与JPEG的压缩算法相关
字段 | 大小(bytes) | 值(或标识) | 描述 |
---|---|---|---|
DHT标识 | 2 | 0xFFC4 | |
长度 | 2 | None | 除DHT标识 以外的段长度 |
表ID&表类 | 1 | None | 高4bits:类型,低4bits:表ID |
编码数量 | 16 | None | |
编码内容 | None | 大小为编码数量 中所有字节之和 |
注:
表类
:主要指定哈夫曼表的编码方式:- 0:DC直流
- 1:AC交流
注意:表类(DC表和AC表)和表ID是分开编码的。
SOS
图像数据开始
字段 | 大小(bytes) | 值(或标识) | 描述 |
---|---|---|---|
SOS标识 | 2 | 0xFFC4 | |
长度 | 2 | None | 除SOS标识 以外的段长度 |
颜色分量数 | 1 | None | 应与SOF0处值对应 |
颜色分量信息 | 2 | None | |
压缩图像数据 | 3 | 0x003F00 |
注:
颜色分量信息
:与SOF0中的描述相同,可分为以下两个部分:- 颜色分量ID:1字节
系数表号:1字节
- 高4bits:指定使用直流分量哈夫曼数编号
- 低4bits:指定使用交流分量哈夫曼数编号
压缩图像数据
:分为以下三个部分:- 谱开始:1字节,固定值:0x00
- 谱结束:1字节,固定值:0x3F
- 谱选择:1字节,几乎都是:0x00
样例
照片见附件
本文经「原本」原创认证,作者乾坤盘,访问yuanben.io查询【4JFSECGC】获取授权信息。