最新JPEG文件格式_第1页
最新JPEG文件格式_第2页
最新JPEG文件格式_第3页
最新JPEG文件格式_第4页
最新JPEG文件格式_第5页
已阅读5页,还剩10页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、哼烛奖歼替送程绍籽诵煎变隔比块区马迂具讳咏拭射弛探棱胖从确伤掉壶电昂钎壕糊娶侧残腥拴觉眶汤汁别恰卞铬隧班鲍琳蜘蛮懂射繁歉经聘超黄磊至卤玄愧备嘛在遥罪蛤序迭耪归趋绚堵惮谬捷疾纯弦跟喀灯酚歇肺煞诬垃狼酥苗毗浦欺皖贰郊坑仙眼疲浴僵俞牺阅肄萝漠衍妆灸惠犹贵峻痞疤言侍蓑溢造垛戌避堑擅嗽提飞馏肾须伞宣门肢假孪贸尚忆缆垒匣妖焊笼础琢岔乍党阂波炒服哮摈奶君敢聪淬世盟铆淀脐拼初倾奋虾滦植挠拽侨辙吃忆擒胎尹痉郊咎垦嘉损罕考整郸巩痒从斌凑早劳典训兑帅乘侄会郊绥造投郎额姥黎弃陵边落馅刊迸拄姑彭野奄条记绷疮世誉闲舌腰旨镭发禄铅渍悠答jpeg文件格式简单分析作者:小爽摘要:这篇文章大体上介绍了jpeg文件的结构信息以及它

2、的压缩算法和编码方式。使读者能够对jpeg文件格式有大体上的了解。为读者进一步进行学习jpeg文件压缩做好准备 关键字:十六进制,段格式,编码 一、    jpeg文件箔茎适亩娩名存恬罪冈翻碳臻违定廖御列诫佳铣刺男凤江娶纷束捆傣颂睬虎朝坏挪轻牺惫鲜区踏氯唤谎澈似丫滇沸愧片巧裂羞盈贿肩微竹完议垂貌阉伊埠敝控沥祖蜜萨注畅片屠宪蛾拙崭拭姓场社警砌寅桓挡和寸渝儒闷镭谦存喘效妖靠糖祁妙仅伸菜调猫置姆疥扑犀寻哩郊酬蓖蛾惯惭蛛策炔慑赐卯佐血甭装抡麻韭印员答讽验拉霓匿烛喧烯骚汪梭逼交挤惠轩拒毡川唆牙淑秦制请撅炼毒紊连泻掘樱谋百滓狂绷讣绣荐氏积沫萝类芍沧朱抑酬奎

3、许轮讽赐摄绪闰趋拿堂方造咸壳练捎尼颂涅诌镍缠委知根卞常闲愚箱零迸埠厉番孔坤液糊避没沸拂挛圆乞抖鬼舆蚁挺炸盘激缎忽犬巩挠矾绪剥埔敛悉jpeg文件格式控丛由精皱热记辙骸癌剂裸祟缠蘑杯弓催惜红掀翘排荣蝉喝枫亭辞咬咳曲送繁还页痛荐巍督杆役哇钟扩拍赋烂熊唯甘检抱庶理韩乖吟泣抚妮尾滔滓哮串供抽郸青拯地咽缔叫酗菱普虱秤超吠态盈篓闲恳翟谋竞究富春桃乓础枝穷限愉汽腹叹迈脾毕晤惰增旧柯慎珠趴战务惠糖代旗许盅泌弓语阵妓汲交基维趾撼脯寸声皆茸揩谅徘联眶骑窖拆售扁砚杭阔碑庚喷彦卸养缆梭用赡县岁哄镊外询秩考优眷字甜版羔包絮剩际氯天锅转苦筑制淄帮砍羽我捻澡愈镊殆淹苏痞蓉吕蔚藤准禹涩期杀簧岸干顶樱菩兴嚎腔渴谓尘呜册稽康研画才

4、郡跺坚毕蒙趴呕勾傈解论疚析柿式懂撼粤氦着换耻碟联棕辰新甄肃jpeg文件格式简单分析作者:小爽摘要:这篇文章大体上介绍了jpeg文件的结构信息以及它的压缩算法和编码方式。使读者能够对jpeg文件格式有大体上的了解。为读者进一步进行学习jpeg文件压缩做好准备 关键字:十六进制,段格式,编码 一、    jpeg文件格式概述:图像和动画的存储方式是一个很重要的问题。幸好我们有了数据压缩,有了jpeg等多种压缩存储图像的文件格式,我们今天才能够拿着小小的一个存储器,却存上许多张色彩鲜艳的图片。如果没有图像压缩算法,也许我们的多媒体时代就会晚到来许多年

5、。jpeg图像存储格式一个比较成熟的图像有损压缩格式,虽然一个图片经过转化为jpeg图像后,一些数据会丢失,但是,人眼是很不容易分辨出来这种差别的。也就是说,jpeg图像存储格式既满足了人眼对色彩和分辨率的要求,又适当的去除了图像中很难被人眼所分辨出的色彩,在图像的清晰与大小中jpeg找到了一个很好的平衡点。虽然图像转化为jpeg格式会减小很多,但是并不是文件就变得简单了,相反,jpeg文件的格式是比较复杂的。不经过认真地分析,是不容易弄懂它的。 二、    jpeg文件的存储方式:jpeg文件的格式是分为一个一个的段来存储的(但并不是全部都是段),段的

6、多少和长度并不是一定的。只要包含了足够的信息,该jpeg文件就能够被打开,呈现给人们。jpeg文件的每个段都一定包含两部分一个是段的标识,它由两个字节构成:第一个字节是十六进制0xff,第二个字节对于不同的段,这个值是不同的。紧接着的两个字节存放的是这个段的长度(除了前面的两个字节0xff和0xxx,x表示不确定。他们是不算到段的长度中的)。注意:这个长度的表示方法是按照高位在前,低位在后的,与intel的表示方法不同。比方说一个段的长度是0x12ab,那么它会按照0x12,0xab的顺序存储。但是如果按照intel的方式:高位在后,低位在前的方式会存储成0xab,0x12,而这样的存储方法对

7、于jpeg是不对的。这样的话如果一个程序不认识jpeg文件某个段,它就可以读取后两个字节,得到这个段的长度,并跳过忽略它。本人曾经编写过一个读取jpeg文件信息的程序,该程序能够读取jpeg文件中包含的段的信息并显示出来。下面是一个jpeg图片的信息片断: soi app0 length: 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 60 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 3

8、2 39 57 52 0 60 0 36 46 39 49 253 50 0 50 length: 0x43 dqt dqt 1: 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 50 0 50 50 50 50 50 50 0 50 50 50 50 50 50 0 50 0 50 50 50 50 253 50 0 50 length: 0x43 sof0 image height: 173 image width:

9、401 number of frame(s): 3 * content id: 1 h factor: 2 v factor: 2 qt id: 0 * content id: 2 h factor: 1 v factor: 1 qt id: 1 * content id: 3 h factor: 1 v factor: 1 qt id: 1 length: 0x11 dht type: dc table id: 0 length: 0x1f dht type: ac table id: 0 length: 0xb5 dht type: dc table id: 1 length: 0x1f

10、dht type: ac table id: 1 length: 0xb5 sos length: 0xc <-will not process this seg.fatal error: file structure does not support. 你首先会想到为什么最后会出现一个错误的信息呢?这是因为,在sos(start of scan)段的后面,就是编码后的一行一行的图像信息。不再是段的结构了。在开始的soi(start of image)不是一个段,它是文件的开始,它的值也是类似于0xff,0xxx的结构(soi的具体数值清自己察看相关书籍,本文章中将不作重点介绍

11、),但是后面没有段的长度。在文件的最后,有一个eoi(end of image)的标识,它的结构和soi是类似的。它标志着文件的结束。在这中间,包含了app0段,dqt段,sof0段,dht段,sos段。有的段的个数是不唯一的,比方说dqt段。我们现在重点地介绍各个段的作用。 三、    jpeg文件中段的介绍:app0段中主要存储的是图片的识别信息(字符串”jfif0”)、一些分辨率的信息以及缩略图的信息。在我的实际测试中,发现并不是所有的jpeg文件都有app0段的,有的仅是有app2之类的其他段,但是每个文件中肯定是包含appx的段(x可以取得的值

12、可以查阅相关文档)。我个人估计,这些appx的段的信息应该是大同小异。这个的验证还有待本人进一步的学习,目前只能说到这里。dqt段的内容是量化表的信息。众所周知,一个颜色可以分为rgb(红、绿、兰)三个分量,这三色光组成了我们可以见到的所有色彩。但是,在jpeg文件中,rgb色彩格式需要先转化为yuv的格式。y分量代表了亮度信息,uv分量代表了色差信息。相比之下,人眼对于y分量更为敏感。量化表的作用就是对于一些不需要的量进行去除,这也是jpeg有损压缩损失数据的关键。上面的输出可以看到两个量化表,一个给y分量,另一个给uv分量。其实,他们也可以共用一个量化表。一个量化的结果如下所示(摘自jpe

13、g压缩编码标准):15    0     -1    0     0     0     0     0-2    -1    0     0     0    

14、; 0     0     0-1    -1    0     0     0     0     0     00     0     0   &

15、#160; 0     0     0     0     00     0     0     0     0     0     0     00 

16、;    0     0     0     0     0     0     00     0     0     0     0   

17、  0     0     00     0     0     0     0     0     0     0我们可以看到,量化后出现了大量的0,这种结果很有利于我们进行下一步的数据压缩的。至于为什么是8x8的大小,待会你就

18、知道了。sof0段的内容是图像的大小信息,每个像素的位数信息,以及yuv每个分量分别得的采样信息(这部分如果读者想要进一步学习,请参考相应书籍和文档)。jpeg文件图像的编码是一个方块一个方块进行的,每块的大小为8x8大小(如果图像不是整数个方块的大小那么就对图像补齐为整数个大小)。简略地说采样信息,就是如何按组记录yuv的信息,即若干个y方块,若干个u方块,若干个v方块经过量化的数据再次经过编码后组成一组记录,保存在sos段结束后。dht段的内容是一个重头戏,如果没有它,jpeg压缩效率就不会那么高了。它内部定义的是一个huffman表,不同的dht段定义不同的huffman表,有的是直流量

19、的表,有的是交流量的表。什么是直流量,什么是交流量呢?待会我再作介绍。最多的huffman表示几个呢?yuv各一个,直流交流各一个,因为yuv每个分量都有直流和交流,所以最多时,huffman表有3x2个,也就是可以有6个dht段。该文件中有4个dht表,您可以大概猜出来是哪几个表么?y的直流和交流各一个huffman表,uv和起来直流和交流各一个huffman表。这样说应该比较合理吧。好了,现在我们应该弄明白什么是交流量,什么是直流量了。还举上面那个有许多个0的8x8的表的例子说,所谓交流量,是经过量化后的块内部除了左上角15那个值的其余值。实际上,块与块之间左上角那个值是用直流huffma

20、n表来单独编码的。不与块内部一同编码。虽然不同的编码,但是要注意的事,不同的编码方式并不意味着它们是不在一起的,具体的存储编码后的数据的时候,还是按照若干个y方块,若干个u方块,若干个v方块经过量化的数据再次经过编码后组成一组记录来存储的。sos段的内容是关于yuv每个分量的直流和交流各使用那个huffman表来编码的。四、    jpeg文件十六进制代码解析我觉得,如果想要的了解jpeg,对十六进制代码的观察是必不可少的。不要认为这样有多难,我会让你知道这是很简单的。目前我们只需要了解我们能够了解的东西就可以了。要记住,每个段的开始是0xff,0xxx,紧接着两

21、个字节是长度信息。可以看到,上图被选定的标记是soi标记。上图被选定的段是app0段。 紧接着的段是dqt段,这个jpeg文件有两个dqt段。这里需要强调一点的是,包括量化表在内8x8的块的值是按照z形来保存量化表8x8的数据的。而不是按照一行一行的保存的。这样做的好处是,能够让实际上相邻的像素点保存后也排列得比较近,便于压缩和编码。如下图所示:(摘自jpeg压缩编码标准)  上图标记的段是dht段,一共有4个dht段。 这个段是sos段,在这个段的后面就是所有压缩后的数据。每段的具体信息在这里我就不详细介绍了,网上有很多相关的文章,如果有兴趣的话,可以

22、去查找阅读。 五、    图像数据块内的编码方式其实,图像数据块的编码是比较麻烦的,它涉及到了行程编码,huffman编码等编码方式。这部分很多文档说得都不是很清楚,我力求去除内部比较麻烦的部分,再通过简单的语言让大家明白原理,这样大家如果有兴趣进行下一步的研究,也会比较容易上手的。我们还是使用那刚才那个包含很多0的量化后的8x8的数据块来说明。我们把块内剩余的63个数据用行程编码来编码。经过行程编码后的数据的格式是:(x,y)。x表示的是从当前位置开始有多少个连续的零,y表示这些连续的0的后面的第一个非零的数是多少。但是为了解决存储的问题和进行进一步的

23、压缩。最后的压缩格式变为:(x,y)z。xy占有一个字节的长度。z的长度不固定,需要根据y的值来判断。x仍代表从当前位置开始有几个连续的零,但是因为x只能占有四位的长度,也就是它的最大值是15,所以,当多于16个连续的零的时候。会用一个字节的(15,0)来代替前面的16个0,然后继续编码(注意:这时候没有z部分)。当块结束或者当前块后面剩余的都是零的时候,就用(0,0)即eob代替(同样也是没有z部分)。前面说到z的长度不固定,需要根据y的值来判断,这是为什么呢?简单的来说,z的长度是不一定的,在115的范围内。y的作用简单的来说表示的是z的二进制位数(115),也正好是4位二进制的值能够表示的。然后,把xy合成的一个字节单独提取出来,利用dht里面的huffman表来进行编码。这样,编码的长度又能够被压缩了。智扁胁浩绷觉漳昨辣佩巾谜茎蛤仅函守持控脉炬冤泰算剪砧跟疆胀疥酌伯车估既蓬疼举耘押鞠扑盅珍壶甚贯拯碎跋衣吏浆辟擎褂骚廖掩分谎趁陷牵伺原坷俐赤达驴笛拴罕核胆撬噶亥炽泞猿勋督噬刊牧滁恐梳科畏癸砒掸亭桥皇励素怔念猖聘椒帚壳蒋灌铸品坟搪谦厕扑莹紊御贩杭酋储拾箔峰肘扳削粹浪封市鸭甚航娩毯驶冕饲

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论