📄 jpeg文件格式简单分析 - 计算机之路 - blogjava.htm
字号:
MARGIN-LEFT: 57pt; TEXT-INDENT: -36pt; mso-level-tab-stop: 57.0pt; mso-level-number-position: left; mso-level-text: %1.
}
OL {
MARGIN-BOTTOM: 0cm
}
UL {
MARGIN-BOTTOM: 0cm
}
</STYLE>
<DIV class=Section1 style="LAYOUT-GRID: 15.6pt none">
<P class=MsoNormal style="TEXT-ALIGN: center" align=center><B><SPAN lang=EN-US
style="FONT-SIZE: 16pt; FONT-FAMILY: 黑体; mso-bidi-font-size: 12.0pt; mso-hansi-font-family: Tahoma; mso-bidi-font-family: Tahoma">JPEG文件格式简单分析<o:p></o:p></SPAN></B></P>
<P class=MsoNormal style="TEXT-ALIGN: center" align=center><SPAN
style="FONT-FAMILY: 宋体; mso-hansi-font-family: Tahoma; mso-bidi-font-family: Tahoma">作者:小爽<SPAN
lang=EN-US><o:p></o:p></SPAN></SPAN></P>
<P class=MsoNormal><SPAN
style="FONT-SIZE: 15pt; FONT-FAMILY: 黑体; mso-bidi-font-size: 12.0pt; mso-hansi-font-family: Tahoma; mso-bidi-font-family: Tahoma; mso-ascii-font-family: Tahoma">摘要:</SPAN><SPAN
lang=EN-US
style="FONT-SIZE: 15pt; FONT-FAMILY: Tahoma; mso-bidi-font-size: 12.0pt; mso-fareast-font-family: 黑体"><o:p></o:p></SPAN></P>
<P class=MsoNormal style="MARGIN-LEFT: 21pt; TEXT-INDENT: 21pt"><SPAN
style="FONT-FAMILY: 宋体; mso-hansi-font-family: Tahoma; mso-bidi-font-family: Tahoma; mso-ascii-font-family: Tahoma">这篇文章大体上介绍了</SPAN><SPAN
lang=EN-US style="FONT-FAMILY: Tahoma">JPEG</SPAN><SPAN
style="FONT-FAMILY: 宋体; mso-hansi-font-family: Tahoma; mso-bidi-font-family: Tahoma; mso-ascii-font-family: Tahoma">文件的结构信息以及它的压缩算法和编码方式。使读者能够对</SPAN><SPAN
lang=EN-US style="FONT-FAMILY: Tahoma">JPEG</SPAN><SPAN
style="FONT-FAMILY: 宋体; mso-hansi-font-family: Tahoma; mso-bidi-font-family: Tahoma; mso-ascii-font-family: Tahoma">文件格式有大体上的了解。为读者进一步进行学习</SPAN><SPAN
lang=EN-US style="FONT-FAMILY: Tahoma">JPEG</SPAN><SPAN
style="FONT-FAMILY: 宋体; mso-hansi-font-family: Tahoma; mso-bidi-font-family: Tahoma; mso-ascii-font-family: Tahoma">文件压缩做好准备</SPAN><SPAN
lang=EN-US style="FONT-FAMILY: Tahoma"><o:p></o:p></SPAN></P>
<P class=MsoNormal><SPAN lang=EN-US
style="FONT-FAMILY: Tahoma"> <o:p></o:p></SPAN></P>
<P class=MsoNormal><SPAN
style="FONT-SIZE: 15pt; FONT-FAMILY: 黑体; mso-bidi-font-size: 12.0pt; mso-hansi-font-family: Tahoma; mso-bidi-font-family: Tahoma; mso-ascii-font-family: Tahoma">关键字:</SPAN><SPAN
style="FONT-FAMILY: 宋体; mso-hansi-font-family: Tahoma; mso-bidi-font-family: Tahoma; mso-ascii-font-family: Tahoma">十六进制,段格式,编码</SPAN><SPAN
lang=EN-US style="FONT-FAMILY: Tahoma"><o:p></o:p></SPAN></P>
<P class=MsoNormal><SPAN lang=EN-US
style="FONT-FAMILY: Tahoma"> <o:p></o:p></SPAN></P>
<P class=MsoNormal
style="MARGIN-LEFT: 21pt; TEXT-INDENT: -21pt; mso-list: l1 level1 lfo1; tab-stops: list 36.0pt"><SPAN
lang=EN-US
style="FONT-SIZE: 15pt; FONT-FAMILY: 黑体; mso-bidi-font-size: 12.0pt; mso-hansi-font-family: Tahoma; mso-bidi-font-family: Tahoma">一、<SPAN
style="FONT: 7pt 'Times New Roman'"> </SPAN></SPAN><SPAN
lang=EN-US
style="FONT-SIZE: 15pt; FONT-FAMILY: 黑体; mso-bidi-font-size: 12.0pt; mso-hansi-font-family: Tahoma; mso-bidi-font-family: Tahoma">JPEG文件格式概述:</SPAN><SPAN
lang=EN-US
style="FONT-FAMILY: 黑体; mso-hansi-font-family: Tahoma; mso-bidi-font-family: Tahoma"><o:p></o:p></SPAN></P>
<P class=MsoNormal style="MARGIN-LEFT: 21pt; TEXT-INDENT: 21pt"><SPAN
style="FONT-FAMILY: 宋体; mso-hansi-font-family: Tahoma; mso-bidi-font-family: Tahoma; mso-ascii-font-family: Tahoma">图像和动画的存储方式是一个很重要的问题。幸好我们有了数据压缩,有了</SPAN><SPAN
lang=EN-US style="FONT-FAMILY: Tahoma">JPEG</SPAN><SPAN
style="FONT-FAMILY: 宋体; mso-hansi-font-family: Tahoma; mso-bidi-font-family: Tahoma; mso-ascii-font-family: Tahoma">等多种压缩存储图像的文件格式,我们今天才能够拿着小小的一个存储器,却存上许多张色彩鲜艳的图片。如果没有图像压缩算法,也许我们的多媒体时代就会晚到来许多年。</SPAN><SPAN
lang=EN-US style="FONT-FAMILY: Tahoma"><o:p></o:p></SPAN></P>
<P class=MsoNormal style="MARGIN-LEFT: 21pt; TEXT-INDENT: 21pt"><SPAN lang=EN-US
style="FONT-FAMILY: Tahoma">JPEG</SPAN><SPAN
style="FONT-FAMILY: 宋体; mso-hansi-font-family: Tahoma; mso-bidi-font-family: Tahoma; mso-ascii-font-family: Tahoma">图像存储格式一个比较成熟的图像有损压缩格式,虽然一个图片经过转化为</SPAN><SPAN
lang=EN-US style="FONT-FAMILY: Tahoma">JPEG</SPAN><SPAN
style="FONT-FAMILY: 宋体; mso-hansi-font-family: Tahoma; mso-bidi-font-family: Tahoma; mso-ascii-font-family: Tahoma">图像后,一些数据会丢失,但是,人眼是很不容易分辨出来这种差别的。也就是说,</SPAN><SPAN
lang=EN-US style="FONT-FAMILY: Tahoma">JPEG</SPAN><SPAN
style="FONT-FAMILY: 宋体; mso-hansi-font-family: Tahoma; mso-bidi-font-family: Tahoma; mso-ascii-font-family: Tahoma">图像存储格式既满足了人眼对色彩和分辨率的要求,又适当的去除了图像中很难被人眼所分辨出的色彩,在图像的清晰与大小中</SPAN><SPAN
lang=EN-US style="FONT-FAMILY: Tahoma">JPEG</SPAN><SPAN
style="FONT-FAMILY: 宋体; mso-hansi-font-family: Tahoma; mso-bidi-font-family: Tahoma; mso-ascii-font-family: Tahoma">找到了一个很好的平衡点。</SPAN><SPAN
lang=EN-US style="FONT-FAMILY: Tahoma"><o:p></o:p></SPAN></P>
<P class=MsoNormal style="MARGIN-LEFT: 21pt; TEXT-INDENT: 21pt"><SPAN
style="FONT-FAMILY: 宋体; mso-hansi-font-family: Tahoma; mso-bidi-font-family: Tahoma; mso-ascii-font-family: Tahoma">虽然图像转化为</SPAN><SPAN
lang=EN-US style="FONT-FAMILY: Tahoma">JPEG</SPAN><SPAN
style="FONT-FAMILY: 宋体; mso-hansi-font-family: Tahoma; mso-bidi-font-family: Tahoma; mso-ascii-font-family: Tahoma">格式会减小很多,但是并不是文件就变得简单了,相反,</SPAN><SPAN
lang=EN-US style="FONT-FAMILY: Tahoma">JPEG</SPAN><SPAN
style="FONT-FAMILY: 宋体; mso-hansi-font-family: Tahoma; mso-bidi-font-family: Tahoma; mso-ascii-font-family: Tahoma">文件的格式是比较复杂的。不经过认真地分析,是不容易弄懂它的。</SPAN><SPAN
lang=EN-US style="FONT-FAMILY: Tahoma"><o:p></o:p></SPAN></P>
<P class=MsoNormal style="MARGIN-LEFT: 21pt; TEXT-INDENT: 21pt"><SPAN lang=EN-US
style="FONT-FAMILY: Tahoma"> <o:p></o:p></SPAN></P>
<P class=MsoNormal
style="MARGIN-LEFT: 21pt; TEXT-INDENT: -21pt; mso-list: l1 level1 lfo1; tab-stops: list 36.0pt"><SPAN
lang=EN-US
style="FONT-SIZE: 15pt; FONT-FAMILY: 黑体; mso-bidi-font-size: 12.0pt; mso-hansi-font-family: Tahoma; mso-bidi-font-family: Tahoma; mso-ascii-font-family: Tahoma">二、<SPAN
style="FONT: 7pt 'Times New Roman'"> </SPAN></SPAN><SPAN
lang=EN-US
style="FONT-SIZE: 15pt; FONT-FAMILY: 黑体; mso-bidi-font-size: 12.0pt; mso-hansi-font-family: Tahoma; mso-bidi-font-family: Tahoma">JPEG文件的存储方式:</SPAN><SPAN
lang=EN-US style="FONT-FAMILY: Tahoma"><o:p></o:p></SPAN></P>
<P class=MsoNormal style="MARGIN-LEFT: 21pt; TEXT-INDENT: 21pt"><SPAN lang=EN-US
style="FONT-FAMILY: Tahoma">JPEG</SPAN><SPAN
style="FONT-FAMILY: 宋体; mso-hansi-font-family: Tahoma; mso-bidi-font-family: Tahoma; mso-ascii-font-family: Tahoma">文件的格式是分为一个一个的段来存储的(但并不是全部都是段),段的多少和长度并不是一定的。只要包含了足够的信息,该</SPAN><SPAN
lang=EN-US style="FONT-FAMILY: Tahoma">JPEG</SPAN><SPAN
style="FONT-FAMILY: 宋体; mso-hansi-font-family: Tahoma; mso-bidi-font-family: Tahoma; mso-ascii-font-family: Tahoma">文件就能够被打开,呈现给人们。</SPAN><SPAN
lang=EN-US style="FONT-FAMILY: Tahoma">JPEG</SPAN><SPAN
style="FONT-FAMILY: 宋体; mso-hansi-font-family: Tahoma; mso-bidi-font-family: Tahoma; mso-ascii-font-family: Tahoma">文件的每个段都一定包含两部分一个是段的标识,它由两个字节构成:第一个字节是十六进制</SPAN><SPAN
lang=EN-US style="FONT-FAMILY: Tahoma">0xFF</SPAN><SPAN
style="FONT-FAMILY: 宋体; mso-hansi-font-family: Tahoma; mso-bidi-font-family: Tahoma; mso-ascii-font-family: Tahoma">,第二个字节对于不同的段,这个值是不同的。紧接着的两个字节存放的是这个段的长度(除了前面的两个字节</SPAN><SPAN
lang=EN-US style="FONT-FAMILY: Tahoma">0xFF</SPAN><SPAN
style="FONT-FAMILY: 宋体; mso-hansi-font-family: Tahoma; mso-bidi-font-family: Tahoma; mso-ascii-font-family: Tahoma">和</SPAN><SPAN
lang=EN-US style="FONT-FAMILY: Tahoma">0xXX</SPAN><SPAN
style="FONT-FAMILY: 宋体; mso-hansi-font-family: Tahoma; mso-bidi-font-family: Tahoma; mso-ascii-font-family: Tahoma">,</SPAN><SPAN
lang=EN-US style="FONT-FAMILY: Tahoma">X</SPAN><SPAN
style="FONT-FAMILY: 宋体; mso-hansi-font-family: Tahoma; mso-bidi-font-family: Tahoma; mso-ascii-font-family: Tahoma">表示不确定。他们是不算到段的长度中的)。注意:这个长度的表示方法是按照高位在前,低位在后的,与</SPAN><SPAN
lang=EN-US style="FONT-FAMILY: Tahoma">Intel</SPAN><SPAN
style="FONT-FAMILY: 宋体; mso-hansi-font-family: Tahoma; mso-bidi-font-family: Tahoma; mso-ascii-font-family: Tahoma">的表示方法不同。比方说一个段的长度是</SPAN><SPAN
lang=EN-US style="FONT-FAMILY: Tahoma">0x12AB</SPAN><SPAN
style="FONT-FAMILY: 宋体; mso-hansi-font-family: Tahoma; mso-bidi-font-family: Tahoma; mso-ascii-font-family: Tahoma">,那么它会按照</SPAN><SPAN
lang=EN-US style="FONT-FAMILY: Tahoma">0x12</SPAN><SPAN
style="FONT-FAMILY: 宋体; mso-hansi-font-family: Tahoma; mso-bidi-font-family: Tahoma; mso-ascii-font-family: Tahoma">,</SPAN><SPAN
lang=EN-US style="FONT-FAMILY: Tahoma">0xAB</SPAN><SPAN
style="FONT-FAMILY: 宋体; mso-hansi-font-family: Tahoma; mso-bidi-font-family: Tahoma; mso-ascii-font-family: Tahoma">的顺序存储。但是如果按照</SPAN><SPAN
lang=EN-US style="FONT-FAMILY: Tahoma">Intel</SPAN><SPAN
style="FONT-FAMILY: 宋体; mso-hansi-font-family: Tahoma; mso-bidi-font-family: Tahoma; mso-ascii-font-family: Tahoma">的方式:高位在后,低位在前的方式会存储成</SPAN><SPAN
lang=EN-US style="FONT-FAMILY: Tahoma">0xAB</SPAN><SPAN
style="FONT-FAMILY: 宋体; mso-hansi-font-family: Tahoma; mso-bidi-font-family: Tahoma; mso-ascii-font-family: Tahoma">,</SPAN><SPAN
lang=EN-US style="FONT-FAMILY: Tahoma">0x12</SPAN><SPAN
style="FONT-FAMILY: 宋体; mso-hansi-font-family: Tahoma; mso-bidi-font-family: Tahoma; mso-ascii-font-family: Tahoma">,而这样的存储方法对于</SPAN><SPAN
lang=EN-US style="FONT-FAMILY: Tahoma">JPEG</SPAN><SPAN
style="FONT-FAMILY: 宋体; mso-hansi-font-family: Tahoma; mso-bidi-font-family: Tahoma; mso-ascii-font-family: Tahoma">是不对的。这样的话如果一个程序不认识</SPAN><SPAN
lang=EN-US style="FONT-FAMILY: Tahoma">JPEG</SPAN><SPAN
style="FONT-FAMILY: 宋体; mso-hansi-font-family: Tahoma; mso-bidi-font-family: Tahoma; mso-ascii-font-family: Tahoma">文件某个段,它就可以读取后两个字节,得到这个段的长度,并跳过忽略它。</SPAN><SPAN
lang=EN-US style="FONT-FAMILY: Tahoma"><o:p></o:p></SPAN></P>
<P class=MsoNormal style="MARGIN-LEFT: 21pt; TEXT-INDENT: 21pt"><SPAN
style="FONT-FAMILY: 宋体; mso-hansi-font-family: Tahoma; mso-bidi-font-family: Tahoma; mso-ascii-font-family: Tahoma">本人曾经编写过一个读取</SPAN><SPAN
lang=EN-US style="FONT-FAMILY: Tahoma">JPEG</SPAN><SPAN
style="FONT-FAMILY: 宋体; mso-hansi-font-family: Tahoma; mso-bidi-font-family: Tahoma; mso-ascii-font-family: Tahoma">文件信息的程序,该程序能够读取</SPAN><SPAN
lang=EN-US style="FONT-FAMILY: Tahoma">JPEG</SPAN><SPAN
style="FONT-FAMILY: 宋体; mso-hansi-font-family: Tahoma; mso-bidi-font-family: Tahoma; mso-ascii-font-family: Tahoma">文件中包含的段的信息并显示出来。下面是一个</SPAN><SPAN
lang=EN-US style="FONT-FAMILY: Tahoma">JPEG</SPAN><SPAN
style="FONT-FAMILY: 宋体; mso-hansi-font-family: Tahoma; mso-bidi-font-family: Tahoma; mso-ascii-font-family: Tahoma">图片的信息片断:</SPAN><SPAN
lang=EN-US style="FONT-FAMILY: Tahoma"><o:p></o:p></SPAN></P>
<P class=MsoNormal style="MARGIN-LEFT: 21pt; TEXT-INDENT: 21pt"><SPAN lang=EN-US
style="FONT-FAMILY: Tahoma"> <o:p></o:p></SPAN></P>
<P class=MsoNormal><SPAN lang=EN-US
style="FONT-FAMILY: Verdana; mso-bidi-font-size: 10.5pt">SOI<o:p></o:p></SPAN></P>
<P class=MsoNormal><SPAN lang=EN-US
style="FONT-FAMILY: Verdana; mso-bidi-font-size: 10.5pt"><SPAN
style="mso-spacerun: yes">
</SPAN>APP0<SPAN style="mso-spacerun: yes"> </SPAN>Length:
0x10<o:p></o:p></SPAN></P>
<P class=MsoNormal><SPAN lang=EN-US
style="FONT-FAMILY: Verdana; mso-bidi-font-size: 10.5pt"><SPAN
style="mso-spacerun: yes">
</SPAN>DQT<o:p></o:p></SPAN></P>
<P class=MsoNormal><SPAN lang=EN-US
style="FONT-FAMILY: Verdana; mso-bidi-font-size: 10.5pt"><SPAN
style="mso-spacerun: yes">
</SPAN>DQT [0]:<o:p></o:p></SPAN></P>
<P class=MsoNormal><SPAN lang=EN-US
style="FONT-FAMILY: Verdana; mso-bidi-font-size: 10.5pt"><SPAN
style="mso-spacerun: yes">
</SPAN>8<SPAN style="mso-spacerun: yes">
</SPAN>6<SPAN style="mso-spacerun: yes">
</SPAN>5<SPAN style="mso-spacerun: yes">
</SPAN>8<SPAN style="mso-spacerun: yes">
</SPAN>12<SPAN style="mso-spacerun: yes">
</SPAN>20<SPAN style="mso-spacerun: yes">
</SPAN>26<SPAN style="mso-spacerun: yes">
</SPAN>31<o:p></o:p></SPAN></P>
<P class=MsoNormal><SPAN lang=EN-US
style="FONT-FAMILY: Verdana; mso-bidi-font-size: 10.5pt"><SPAN
style="mso-spacerun: yes">
</SPAN>6<SPAN style="mso-spacerun: yes">
</SPAN>6<SPAN style="mso-spacerun: yes">
</SPAN>7<SPAN style="mso-spacerun: yes">
</SPAN>10<SPAN style="mso-spacerun: yes">
</SPAN>13<SPAN style="mso-spacerun: yes">
</SPAN>29<SPAN style="mso-spacerun: yes">
</SPAN>30<SPAN style="mso-spacerun: yes">
</SPAN>28<o:p></o:p></SPAN></P>
<P class=MsoNormal><SPAN lang=EN-US
style="FONT-FAMILY: Verdana; mso-bidi-font-size: 10.5pt"><SPAN
style="mso-spacerun: yes">
</SPAN>7<SPAN style="mso-spacerun: yes">
</SPAN>7<SPAN style="mso-spacerun: yes">
</SPAN>8<SPAN style="mso-spacerun: yes">
</SPAN>12<SPAN style="mso-spacerun: yes">
</SPAN>20<SPAN style="mso-spacerun: yes">
</SPAN>29<SPAN style="mso-spacerun: yes">
</SPAN>35<SPAN style="mso-spacerun: yes">
</SPAN>60<o:p></o:p></SPAN></P>
<P class=MsoNormal><SPAN lang=EN-US
style="FONT-FAMILY: Verdana; mso-bidi-font-size: 10.5pt"><SPAN
style="mso-spacerun: yes">
</SPAN>7<SPAN style="mso-spacerun: yes">
</SPAN>9<SPAN style="mso-spacerun: yes">
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -