JPEG文件格式简单分析.docx
《JPEG文件格式简单分析.docx》由会员分享,可在线阅读,更多相关《JPEG文件格式简单分析.docx(31页珍藏版)》请在冰点文库上搜索。
JPEG文件格式简单分析
摘要:
这篇文章大体上介绍了JPEG文件的结构信息以及它的压缩算法和编码方式。
使读者能够对JPEG文件格式有大体上的了解。
为读者进一步进行学习JPEG文件压缩做好准备
关键字:
十六进制,段格式,编码
JPEG文件格式概述:
图像和动画的存储方式是一个很重要的问题。
幸好我们有了数据压缩,有了JPEG等多种压缩存储图像的文件格式,我们今天才能够拿着小小的一个存储器,却存上许多张色彩鲜艳的图片。
如果没有图像压缩算法,也许我们的多媒体时代就会晚到来许多年。
JPEG图像存储格式一个比较成熟的图像有损压缩格式,虽然一个图片经过转化为JPEG图像后,一些数据会丢失,但是,人眼是很不容易分辨出来这种差别的。
也就是说,JPEG图像存储格式既满足了人眼对色彩和分辨率的要求,又适当的去除了图像中很难被人眼所分辨出的色彩,在图像的清晰与大小中JPEG找到了一个很好的平衡点。
虽然图像转化为JPEG格式会减小很多,但是并不是文件就变得简单了,相反,JPEG文件的格式是比较复杂的。
不经过认真地分析,是不容易弄懂它的。
JPEG文件的存储方式:
JPEG文件的格式是分为一个一个的段来存储的(但并不是全部都是段),段的多少和长度并不是一定的。
只要包含了足够的信息,该JPEG文件就能
够被打开,呈现给人们。
JPEG文件的每个段都一定包含两部分一个是段的标识,它由两个字节构成:
第一个字节是十六进制OxFF,第二个字节对于不同的段,这个值是不同的。
紧接着的两个字节存放的是这个段的长度(除了前面的两个字节OxFF和0xXX,X表示不确定。
他们是不算到段的长度中的)。
注意:
这个长度的表示方法是按照高位在前,低位在后的,与Intel的表示
方法不同。
比方说一个段的长度是0x12AB,那么它会按照0x12,OxAB的顺序存储。
但是如果按照Intel的方式:
高位在后,低位在前的方式会存储成OxAB,0x12,而这样的存储方法对于JPEG是不对的。
这样的话如果一个程序不认识JPEG文件某个段,它就可以读取后两个字节,得到这个段的长度,并跳过忽略它。
本人曾经编写过一个读取JPEG文件信息的程序,该程序能够读取JPEG文件中包含的段的信息并显示出来。
下面是一个JPEG图片的信息片断:
SOI
APP0Length:
0x10
DQT
DQT[0]:
8
6
5
8
12
20
26
31
6
6
7
10
13
29
30
28
7
7
8
12
20
29
35
7
9
11
15
26
44
50
31
9
11
19
28
34
56
52
0
12
18
28
32
61
52
0
46
25
32
39
57
52
0
60
0
36
46
39
49
253
50
0
50
Length:
0x43
DQT
DQT[1]:
50
9
9
12
24
50
50
50
50
9
11
13
33
50
50
50
50
12
13
28
50
50
50
50
50
24
33
50
50
50
50
50
50
50
50
50
50
50
50
0
50
50
50
50
50
50
50
0
50
50
50
50
50
0
50
0
500
50505050253
50
Length:
0x43
SOFO
ImageHeight:
173
ImageWidth:
401
NumberofFrame(s):
3
****************
ContentID:
1
HFactor:
2
VFactor:
2
QTID:
0
****************
ContentID:
2
HFactor:
1
VFactor:
1
QTID:
1
****************
ContentID:
3
HFactor:
1
VFactor:
1
QTID:
1
Length:
0x11
DHT
Type:
DCTABLE
ID:
0
Length:
0x1f
DHT
Type:
ACTABLE
ID:
0
Length:
0xb5
DHT
Type:
DCTABLE
ID:
1
Length:
0x1f
DHT
Type:
ACTABLE
ID:
1
Length:
0xb5
SOS
Length:
0xc
v-WillNotProcessThisSeg.
FATALERROR:
FileStructureDoesNOTSupport.
你首先会想到为什么最后会出现一个错误的信息呢?
这是因为,在SOS
(StartOfSean)段的后面,就是编码后的一行一行的图像信息。
不再是段的结构了。
在开始的SOI(StartOfImage)不是一个段,它是文件的开始,它的值也是类似于OxFF,0xXX的结构(SOI的具体数值清自己察看相关书籍,本文章中将不作重点介绍),但是后面没有段的长度。
在文件的最后,有一个EOI(EndOfImage)的标识,它的结构和SOI是类似的。
它标志着文件的结束。
在这中间,包含了APP0段,DQT段,SOFO段,DHT段,SOS段。
有的段的个数是不唯一的,比方说DQT段。
我们现在重点地介绍各个段的作用。
三、JPEG文件中段的介绍:
APP0段中主要存储的是图片的识别信息(字符串”JFIIO”)、一些分辨率的信息以及缩略图的信息。
在我的实际测试中,发现并不是所有的JPEG
文件都有APP0段的,有的仅是有APP2之类的其他段,但是每个文件中肯定是包含APPX的段(X可以取得的值可以查阅相关文档)。
我个人估计,这些APPX的段的信息应该是大同小异。
这个的验证还有待本人进一步的学习,目前只能说到这里。
DQT段的内容是量化表的信息。
众所周知,一个颜色可以分为RGB(红、绿、兰)三个分量,这三色光组成了我们可以见到的所有色彩。
但是,在JPEG文件中,RGB色彩格式需要先转化为YUV的格式。
丫分量代表了亮度信息,UV分量代表了色差信息。
相比之下,人眼对于丫分量更为敏感。
量化表的作用就是对于一些不需要的量进行去除,这也是JPEG有损压缩损失数据的
关键。
上面的输出可以看到两个量化表,一个给丫分量,另一个给UV分量
其实,他们也可以共用一个量化表。
一个量化的结果如下所示(摘自《JPEG
压缩编码标准》
):
15
0
-1
0
00
0
0
-2
-1
0
0
00
0
0
-1
-1
0
0
00
0
0
0
0
0
0
00
0
0
0
0
0
0
00
0
0
0
0
0
0
00
0
0
0
0
0
0
00
0
0
0
0
0
0
00
0
0
我们可以看到,
量化后出现了大量的
0,
这种结果很有利于我们进行下一步
的数据压缩的。
至于为什么是
8x8的大小,待会你就知道了。
SOFO段的内容是图像的大小信息,每个像素的位数信息,以及YUV每
个分量分别得的采样信息(这部分如果读者想要进一步学习,请参考相应书籍和文档)。
JPEG文件图像的编码是一个方块一个方块进行的,每块的大小为8x8大小(如果图像不是整数个方块的大小那么就对图像补齐为整数个大小)。
简略地说采样信息,就是如何按组记录YUV的信息,即若干个丫
方块,若干个U方块,若干个V方块经过量化的数据再次经过编码后组成一组记录,保存在SOS段结束后。
DHT段的内容是一个重头戏,如果没有它,JPEG压缩效率就不会那么高了。
它内部定义的是一个Huffman表,不同的DHT段定义不同的Huffman表,有的是直流量的表,有的是交流量的表。
什么是直流量,什么是交流量呢?
待会我再作介绍。
最多的Huffman表示几个呢?
YUV各一个,直流交流各一个,因为YUV每个分量都有直流和交流,所以最多时,Huffman表有3x2个,也就是可以有6个DHT段。
该文件中有4个DHT表,您可以大概猜出来是哪几个表么?
丫的直流和交流各一个Huffman表,UV和起来直流和交流各一个Huffman表。
这样说应该比较合理吧。
好了,现在我们应该弄明白什么是交流量,什么是直流量了。
还举上面那个有许多个0的8x8的表的例子说,所谓交流量,是经过量化后的块内部除了左上角15那个值的其余值。
实际上,块与块之间左上角那个值是用直流Huffman表来单独编码的。
不与块内部一同编码。
虽然不同的编码,但是要注意的事,不同的编码方式并不意味着它们是不在一起的,具体的存储编码后的数据的时候,还是按照若干个丫方块,若干个U方块,若干个V方块经过量化的数据再次经过编码后组成一组记录来存储的。
SOS段的内容是关于YUV每个分量的直流和交流各使用那个Huffman表来编码的。
四、JPEG文件十六进制代码解析
我觉得,如果想要的了解JPEG,对十六进制代码的观察是必不可少的。
不要认为这样有多难,我会让你知道这是很简单的。
目前我们只需要了解我们能够了解的东西就可以了。
要记住,每个段的开始是0xFF,0xXX,紧接
着两个字节是长度信息。
可以看到,上图被选定的标记是SOI标记
9tem
11
J16
00
91
01
•1
■Iilfi
」・」F1F■…■■用
SUUIITU
ff
抽
UU
flft
IS
«a
曲1
口*
U3K
[.H.,|.,.C,,„T»・*
tseora
IM3断齢
龄
IK
慚
u?
VC
BW
fl/
a/
0/
nr
贤w
eeuv^i
UU09W11
at
1?
12
11
of
11
11
13
16
ic
1/13
MOMB
Uh1A1b11
n
Itt
1H
1A
1i>
w
If
tF
即
1317
t
1旦
tilingg
2222U
24
1C
n
TF
1E
If
Dtt
艸
43
01
KK
jid,3(:
…
■DOMI
DPS07U6*7
OE
QB
M
PH
IE
i-t
11
t・
1C
IL
ICIE
fl4911137a
1CIEIEIE
1E
IE
IF
ir
1[
it
ir
ir
IE
IE
IEIE
SBnama
1ETE1E1E
IE
IE
If
HE
1E
IE
1E
TF
w
IF
IE1E
irifirir
ir
IE
IE
1E
IE
IE
1T
ir
IE
IF
FFCl
eani&.iii
on11M•■
64
Bl
?
C
鲫
?
?
nia
■2
11
HI
Q311
d「…応………
01FFCi•■
1C
BQ
站
Bft
«a
・\
fti
91
01
Qi
OftAB
meet
noQB80馳
«JQ
Bfl
r»
v«
S7
购
>3
9»
>1
S2FF
»■■**V■*■4i!
8-«*»H«
CI|HU1|.Oin
to
ai
iia
阳
ea
HI
(El
■?
OJi
02
04M
■用……………
6QBDm>|
Mt4PQHlid
411
a?
的
IM
AU
H6
11
1?
21
0/HH
t.*
»OOQF<
133122**
2
1S
32
SI
16
91
23
3»
昭
52
41“
.1'華”f.的册他
•oai•>
17z样as
33
95
3?
U
2
U
76
11
*12
.$lj3*>^Cblvw.,
BOQI111
AlFFUh
14
111
»1
脯
MU
]i9
tlUi
iW
Urt
dB
UH0|
If即SB11ugri
eii
nn
tiv
FF
灿
it
11
in
0Q
0Ugg
CIUU13I
uu
FF
DAIB
a001Hl
DC0301•■
BZ
11
03
11
«iU
3f
tm
FB
CA
Qh
Abtt?
OBOlliM
94M呻
az
Vi*
AF
E1
co
62
33
12
5EBA
■a.•■■■■■■■•■a"W■ab-^l.A*
eaoiAi
rn«i:
ueem
6E)
?
■
^7
g
7U
7B
93
M
D7DF
A0017I
54IE1*A5
7B
Bfl:
77
CC
13
3C
晒
7C
Ch
9F
7D*5
T…Jr.4…讣
fianiffi
rr■■«i:
Fti
7A
DF
HE
IB
DT
ZA
arF・
«A1BiJF■.SKK■
eanwa
ill)"£29・■
科
ifl
ns
■■
20
朋
29・■
孔)孔申」0・)氐JI3
ce^idi
?
94flH号
囱号
?
9
1*0
AS
29
4*
屿
29
4f>粘
.)o4B.)e9>i*.>9.
ftanifri
;o*BAS?
»
科
2*
h・
AB
R?
?
c
?
f
7E
FJAO
eeout
40VC42CO
?
A
69
6A
«C
EC
利
AE
5・
iflM
'.b,-$iJ,.„[PAT
紳91iDO30
耐
D%
E5
輛
FF
t>A
FF
an62
0HO1e>
UFFMM眄
硏
1$
60
F・
55
DZ
FO
BA
Ob
35?
e
N11AeIII■■■■.5■
00t>1F>
A317tiBF5
0t
31
yi
2£
忖
他
TP
57
2H
时
FE收却
卞・•・・1taaV(・・■
ndot?
as
RJLI£tlt9
ti-y
IB
亦
6C
81
HL
C&
Lfl
1U66
deo2ia
Of/2C/»■
*C
63
2E
f2
创
转
B6
EC
叫
斛
5•r■«it.rdt—T■
OUUrZZB
A3I5i2UIC
[g
BO
4|0
29
R7
VL
BM
V
Ft
OB
E1M
=・**-nd1・a--亠a--
C1QU23I
9EBDAH9E
85
0F
AC
9D
B7
FF
D®
2F
2F
FE
50CA
+■»«v
U口孵斷・
B27A51・D
93
3C
Cl
A£
9t
ce
曲
21
A1
fi9SB
.;QM.<...U
■tawi■►H-
Jj
上图被选定的段是APP0段
U0
*8
uoai
Dis»UM3
AUft
an
曲
黏
as
■oettiB
帖
>4
U405
<6
齢闆9f
0/
ISZ
0/
07
*
M
UU
n
K11
flt
121211
•11
11
13
14
IE
1/
13
BEIODliB
1出
1A
1511
11
IS2119
1AID
W
IF
IF
1F
13
ir
eeoKi
22
2鲤
221E
1C1EH
it|n
Dtt
43
ei
BS
05
oaoiai&s
■7
MV7
MMBE
IE14
11
IE
IE
rc
IE
flaao/n
IC
IE
1CIE
IE
IEIEIE
IEIE
IE
IE
1E
IE
ir
IE
ei0M>
nr
1E
1F1E
IE
1fIf1f
1E1E
11
1:
E
1E
IF
1E
1E
eani»B
IF
1E
IE1E
ir
IE1F1F
1F1E
ir
If
杆
IF
FF
Cl
ionia.ifl
nn
11
mta
时
11?
CB3
01?
7
na
1?
11
gi
V)
11
m
FF
C4»A
1C
MA1Aft
帕町
ai
01
hi
an
«D
nMcl
00
肿
no»e
va
vif)a«5
W17
n
>1
<2
FF
■MOdl
C4
SB
舟0w
00
Bl軸
«211
S3
>2
加
02
06
M
Mf
»l
uhn
HI
垃翻殖
M那
轴
11
t?
?
1
a?
BH
laoara
13
31
22
14»
151251
U«1
23
38
*2
52
fli
71
netjis>
17
?
*
7582
B3
B阳3335
37剋J
A2
从
M
77
81
UM
6UU11B
Al
FF
C4I9H
1*
91(HBtt
WV>•
»»
Ub
QB
UH
«■
FFOHFF1■哺局屜Oft訓*111SOW
.1,hA.«2Q^mRaq
.$uw..S57Cbt:
vWp.
...…JF)F・
mj・••以」
aotn^iun・■utivtfruDi
eaititia
IK
A3
81
•■R
11
«3
11
0Q
aooi*>・
94
0?
gA5
町
fiF
77
ainifti
FD
«C
ne
£4刃
75
6D
91
•■01”
54
IF
1*
Bfl
理
CC
13
nenifti
FF
BD
AC
FB
7A
DF
1E
•arivi
nn
血号
2V
・・•葺
ns
eenua
粘
?
9
48
A$?
9
轲
恭
fianwn
20
IvB
29kO
29
期
朋
aeoic>
40
9C
2
C»
科
69
6A
SC
eaeiiia
8D
们
DB
3D佃
A7
DA
E5
ES
QSUIel
毗
FF
un
15
ee
FS
55
•■•ifi
A3
17
SB
IF5肛
31
91
2E
灯
tlUtK>aB
須
LB
10
E9M
KB
Ff»
95
«0K*ia
nr
/2
C7
l$SVC
63
2E
fleU2ZB
A3
帖
2H
fiLB
&P
29
■HF
tlQlJ(23l
9L
OD
AB
9E»5i
BF
AC
90
87
B2
7A
51
W*3
3C
Cl
AE
9t
800001
Ff
OHFF
El
00
ia
J|6
0091
01
ei
90斷。
11UUU14
UH
iH
Qtl
Hi
»U
AU
M
•3
IM
03
寥
帖
取
#5
K
帕
9/
K
W
0/
(M
07
廿
W
flQUBIS
m
K
SC
11
at
12
12
11
11
11
13
16
ic
17
13
in
1A
15
11
11
18
11
18
IA
ID
w
If
IF
ir
13
ir
tiaoKi
22
2*
22
1E
1C
It
If
1£
FF
D6
・・
<9
>1
K
0
■7
M
•7
flC
m
M
BE
IE
11
11
T・
IE
IE
FC
1E
■■0071
pit
IE
IE
1E
H
IE
IE
IE
1E
IE
IE
IE
It
IE
IE
IE
fiHOEilia
11
1E
1F
1E
1£
If
ir
IE
1E
1E
11
1E
1E
IE
1F
1E
dann?
n
ir
IE
IE
IE
1E
IE
ir
K
1[
IE
ir
IF
IE
IE
FF
Cl
eanoi.ifl
an
11
M
M
仙
Bl
?
c
■3
ri
OQ!
97
11
ai
K)
11
•VMbl
餌i|