一、JPEG文件简介

​ JPEG( Joint Photographic Experts Group)即联合图像专家组,是用于连续色调静态图像压缩的一种标准,文件后缀名为.jpg或.jpeg,是最常用的图像文件格式。其主要是采用预测编码(DPCM)、离散余弦变换(DCT)以及熵编码的联合编码方式,以去除冗余的图像和彩色数据,属于有损压缩格式,它能够将图像压缩在很小的储存空间,一定程度上会造成图像数据的损伤。尤其是使用过高的压缩比例,将使最终解压缩后恢复的图像质量降低,如果追求高品质图像,则不宜采用过高的压缩比例。

JPEG和JPG的联系:JPEG是一种文件格式,其常用的文件后缀名为.jpg和.jpeg。JPG只能做文件后缀名,而JPEG是文件格式,也可以是后缀名(扩展名)。

二、JPEG图片格式分析

JPEG图片格式组成部分:SOI(文件头)+APP0(图像识别信息)+ DQT(定义量化表)+ SOF0(图像基本信息)+ DHT(定义Huffman表) + DRI(定义重新开始间隔)+ SOS(扫描行开始)+ EOI(文件尾)

其中粗体部分是必须的

2.1 JPEG的段结构

JPEG 文件的格式是分为一个一个的段来存储的,段的多少和长度并不是一定的。只要包含了足够的信息,该JPEG文件就能够被打开,呈现给人们。JPEG文件的每个段都一定包含两部分一个是段的标识,它由两个字节构成:第一个字节是十六进制0xFF,第二个字节对于不同的段,这个值是不同的。紧接着的两个字节存放的是这个段的长度(除了前面的两个字节0xFF和0xXX,X表示不确定。他们是不算到段的长度中的)。

段的一般结构:

-----------------------------------------------------------------
名称  字节数     数据  说明
-----------------------------------------------------------------
段标识   1         FF      每个新段的开始标识
段类型   1                 类型编码(称作“标记码”)
段长度   2                 包括段内容和段长度本身,不包括段标识和段类型
段内容                     ≤65533字节

2.2 段类型

JPEG文件必须有的段类型如下表:

---------------------------------------
名称  标记码     说明
---------------------------------------
SOI     D8          文件头
EOI     D9          文件尾
SOF0    C0          帧开始(标准 JPEG)
SOF1    C1          同上
DHT     C4          定义 Huffman 表(霍夫曼表)
SOS DA          扫描行开始
DQT DB          定义量化表
DRI     DD          定义重新开始间隔
APP0    E0          定义交换格式和图像识别信息
COM FE          注释
-----------------------------------------------------------

2.3 SOI文件头

JPEG文件的开始2个字节都是FF D8这是JPEG协议规定的

SOI(文件头)

-----------------
名称  字节数 值
-----------------
段标识   1     FF
段类型   1     D8 
-----------------

2.4 APP0图像识别信息

--------------------------------------------------------------------------
名称      字节数     值                   说明
--------------------------------------------------------------------------
段标识       1         FF
段类型       1         E0
段长度       2         0010                    如果有RGB缩略图就=16+3n
  (以下为段内容)
交换格式      5         4A46494600          “JFIF”的ASCII码
主版本号      1
次版本号      1  
密度单位      1         0=无单位;1=点数/英寸;2=点数/厘米
X像素密度     2                             水平方向的密度   
Y像素密度     2                             垂直方向的密度
缩略图X像素  1                           缩略图水平像素数目  
缩略图Y像素  1                           缩略图垂直像素数目
(如果“缩略图X像素”和“缩略图Y像素”的值均>0,那么才有下面的数据)
RGB缩略图  3×n         n=缩略图像素总数=缩略图X像素×缩略图Y像素
--------------------------------------------------------------------------

2.5 DQT定义量化表

DQT(定义量化表)

--------------------------------------------------------------------------
名称  字节数 值       说明
--------------------------------------------------------------------------
段标识   1     FF
段类型   1     DB
段长度   2     43      其值=3+n(当只有一个QT时)
(以下为段内容)
QT信息  1     0-3位:QT号
4-7位:QT精度(0=8bit,1字节;否则=16bit,2字节)
QT        n             n=64×QT精度的字节数
--------------------------------------------------------------------------

2.6 SOF0图像基本信息

SOF0(图像基本信息)

--------------------------------------------------------------------------
名称  字节数 值       说明
--------------------------------------------------------------------------
段标识   1     FF
段类型   1     C0
段长度   2             其值=8+组件数量×3
  (以下为段内容)
样本精度 1      8       每个样本位数(大多数软件不支持12和16)
图片高度 2
图片宽度 2
组件数量 1      3       1=灰度图,3=YCbCr/YIQ 彩色图,4=CMYK 彩色图
  (以下每个组件占用3字节)
组件 ID     1             1=Y, 2=Cb, 3=Cr, 4=I, 5=Q
采样系数 1              0-3位:垂直采样系数
                        4-7位:水平采样系数
量化表号 1
---------------------------------------------------------------------------

2.7 DHT定义Huffman表

DHT(定义Huffman表)

--------------------------------------------------------------------------
名称  字节数 值       说明
--------------------------------------------------------------------------
段标识   1     FF
段类型   1     C4
段长度   2             其值=19+n(当只有一个HT表时)
  (以下为段内容)
HT信息  1             0-3位:HT号
                                4位:   HT类型, 0=DC表,1=AC表
            5-7位:必须=0
HT位表  16            这16个数的和应该≤256
HT值表  n             n=表头16个数的和
--------------------------------------------------------------------------

2.8 SOS扫描行开始

SOS(扫描行开始)

--------------------------------------------------------------------------
名称          字节数 值       说明
--------------------------------------------------------------------------
段标识            1    FF
段类型            1    DA
段长度            2    000C    其值=6+2×扫描行内组件数量
  (以下为段内容)
扫描行内组件数量 1  3       必须≥1,≤4(否则错误),通常=3
  (以下每个组件占用2字节)
组件ID               1    1 = Y, 2 = Cb, 3 = Cr, 4 = I, 5 = Q
Huffman表号      1    0-3位:AC表号 (其值=0...3)
                                    4-7位:DC表号(其值=0...3)
剩余3个字节          3           最后3个字节用途不明,忽略
--------------------------------------------------------------------------

2.9 EOI文件尾

EOI(文件尾)

------------------
名称  字节数   值
------------------
段标识   1     FF
段类型   1     D9 
------------------

2.10 其他段

(1)COM注释

--------------------------------------------------------------------------
名称  字节数 值    说明
--------------------------------------------------------------------------
段标识   1     FF
段类型   1     FE
段长度   2     其值=注释字符的字节数+2
段内容         注释字符
--------------------------------------------------------------------------

(2)DRI(定义重新开始间隔)

--------------------------------------------------------------------------
名称  字节数 值   说明
--------------------------------------------------------------------------
段标识   1     FF
段类型   1     DD
段长度   2     4 
  (以下为段内容)
开始间隔 2  n   复位标记的间隔距离
---------------------------------------------------------------------------

三、JPEG实例分析

分析该JPEG文件:
在这里插入图片描述

3.1 SOI文件头

在这里插入图片描述

3.2 APP0图像识别信息

在这里插入图片描述

3.3 DQT定义量化表

在这里插入图片描述

3.4 SOF0图像基本信息

在这里插入图片描述

3.5 DHT定义Huffman表

在这里插入图片描述

3.6 SOS扫描行开始

在这里插入图片描述

3.7 EOI文件尾

在这里插入图片描述

3.8 DRI定义重新开始间隔

在这里插入图片描述


版权声明:本文为awaaaaa_原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/awaaaaa_/article/details/125123926