JPEG数据格式分析

分析对象是一幅8x8的jpg图片。如下,图片已被放大并被虚线切分

JPEG数据格式分析_第1张图片

用windows照片查看器查看图片详细信息:

信息 参数
大小 667字节
尺寸 8x8
宽度 8像素
高度 8像素
水平分辨率 96dpi
垂直分辨率 96dpi
位深度 24

用UltraEdit打开图片,截图如下:

将该数据切分为10个部分,图中已做标记。

预备知识
JPEG文件由两部分组成:标记码和压缩数据。JPEG图像所有信息都由标记码记录,标记码之间用若干个0xFF分开。

  • 数据第一部分
    JPEG格式由SOI(start of image)标记码开头:
标记结构 字节数
0xFF 1
0xD8 1

SOI不用解释。
紧接着是标记码APP0(application),JFIF将文件的相关信息定义在此标记中,如下

标记结构 字节数 意义 对应数据(十六进制)
0xFF 1 FF
0xE0 1 E0
Lp 2 APP0标记码长度 00 10(由此看出该标记码长度为16字节)
Identifier 5 JFIF识别码 4A 46 49 46 00(“JFIF”)
Version 2 JFIF版本号 01 01
Units 1 单位 01
Xdensity 2 水平分辨率 00 60(90dpi)
Ydensity 2 垂直分辨率 00 60(90dpi)
Xthumbnail 1 水平点数 00
Ythumbnail 1 垂直点数 00

至此,数据第一部分分析完。

  • 数据第二部分
    该部分是DQT(define quantization table)标记码。看看该标记码格式:
标记结构 字节数 意义 对应数据(十六进制)
0xFF 1 FF
0xDB 1 DB
Lq 2 DQT标记码长度 00 43(67字节)
(Pq, Tq) 1 在基本系统中Pq=0,Tq=0~1 00(说明后面量化表中的每个值为1个字节)
Q0 1或2 量化表的值 02
Q1 1或2 量化表的值 01
Qn 1或2 量化表的值 0c

至此,数据第二部分也分析完

  • 数据第三部分
    该部分数据开头为0xFF 0xDB,显然该部分也是个DQT标记码,分析如上,不再赘述。

  • 数据第四部分
    该部分开头为0xFF 0xC0,该部分为SOF(start of frame)标记,基线离散余弦变换

标记结构 字节数 意义 对应数据(十六进制)
0xFF 1 FF
0xC0 1 C0
Lf 2 SOF标记码长度 11(17字节)
P 1 基本系统中为8 08
Y 2 图像高度 00 08(8个像素)
X 2 图像宽度 00 08(8个像素)
Nf 1 为1代表灰度图,为3代表彩色图 03(彩色)
C1 1 成分编号 1 01
(H1, V1) 1 第一个采样因子 22
Tq1 1 该量化表编号 00
Cn 1 成分编号n 03
(Hn,Vn) 1 第n个采样因子 11
Tqn 1 该量化表编号 01
  • 数据第五部分
    该部分开头为0xFF 0xC4,是DHT(define huffman table)标记码定义了哈弗曼树表
标记结构 字节数 意义 对应数据(十六进制)
0xFF 1 FF
0xC4 1 C4
Lh 2 DHT标记码长度 00 1F(31个字节)
(Tc, Th) 1 00
L1 1 00
L16 1 00
V1 1 01
Vt 1 0B

该标记中,Tc为0指DC所用的Huffman表,Tc为1指AC所用的Huffman表,Th的值为0或1,2Tc+Th表示Huffman表的编号(最多4个),Ln表示每个n为Huffman码字的个数,n = 1~16。Vt表示每个Huffman码字所对应的值,t = L1+L2+…+L16

  • 数据第六部分
    同上

  • 数据第七部分
    同上

  • 数据第八部分
    同上

  • 数据第九部分
    该部分为SOS(start of scan)标记码,如下表

标记结构 字节数 意义 对应数据(十六进制)
0xFF 1 FF
0xDA 1 DA
Ls 2 SOS标记码长度 00 0C
Ns 1
Cs1 1
(Td1,Ta1) 1
CsNs
(TdNs,TaNs)
Ss
Se
(Ah,Al)

Ns为scan中成分的个数,CsNs为在scan中的编号,TdNs为高4位,TaNs为低4位,分别表示DC和AC编码表的编号, 基本系统中,Ns = Nf,Ss,Se,Ah,Al均为0

  • 数据第十部分
    图像结束标记码0xFF 0xD9,标记码EOF(end of image)
标记结构 字节数
0xFF 1
0xD9 1

你可能感兴趣的:(压缩,视频,图像,jpeg)