bmp/gif/jpg图象最底层原理分析(1)----jpg
2011年10月17日
写在前面的
***********************************************
24位bmp是公认最好的图片存储格式,存储了图片所有的信息
24位bmp是每像素用24位二进制存储该像素点的图像信息,相当于3字节
所以,图像占用空间大小就可以算了{
将图像长宽单位换位像素(比如:1024X960 800X600),则文件大小为 (长X宽X3)字节
如:800X600的图片大小为800X600X3=1440000字节=1.44兆
1024X960的图像大小为2.95兆
16位bmp则是24为的三分之二大小
8............一..
1.........24..1..
256色是2的8次方,相当于8位的bmp
同理自己根据二进制换算
**********************************************
1.jpg图片压缩过程
jpg压缩比例不固定
本文仅讨论静止图像的压缩基本算法,图像压缩的目的在于以较少的数据来表示图像以节约存储费用,或者传输时间和费用。 jpeg压缩算法可以用失真的压缩方式来处理图像,但失真的程度却是肉眼所无法辩认的。这也就是为什么jpeg会有如此满意的压缩比例的原因。 下面主要讨论,jpeg基本压缩法。 一.jpeg压缩过程 jpeg压缩分四个步骤实现: 1.颜色模式转换及采样; 2.dct变换; 3.量化; 4.编码。 二.1.颜色模式转换及采样 rgb色彩系统是我们最常用的表示颜色的方式。jpeg采用的是ycbcr色彩系统。想要用jpeg基本压缩法处理全彩色图像,得先把rgb颜色模式图像数据,转换为ycbcr颜色模式的数据。y代表亮度,cb和cr则代表色度、饱和度。通过下列计算公式可完成数据转换。 y=0.2990r+0.5870g+0.1140b cb=-0.1687r-0.3313g+0.5000b+128 cr=0.5000r-0.4187g-0.0813b+128 人类的眼晴对低频的数据比对高频的数据具有更高的敏感度,事实上,人类的眼睛对亮度的改变也比对色彩的改变要敏感得多,也就是说y成份的数据是比较重要的。既然cb成份和cr成份的数据比较相对不重要,就可以只取部分数据来处理。以增加压缩的比例。jpeg通常有两种采样方式:yuv411和yuv422,它们所代表的意义是y、cb和cr三个成份的数据取样比例。 2.dct变换 dct变换的全称是离散余弦变换(discrete cosine transform),是指将一组光强数据转换成频率数据,以便得知强度变化的情形。若对高频的数据做些修饰,再转回原来形式的数据时,显然与原始数据有些差异,但是人类的眼睛却是不容易辨认出来。 压缩时,将原始图像数据分成8*8数据单元矩阵,例如亮度值的第一个矩阵内容如下: jpeg将整个亮度矩阵与色度cb矩阵,饱和度cr矩阵,视为一个基本单元称作mcu。每个mcu所包含的矩阵数量不得超过10个。例如,行和列采样的比例皆为4:2:2,则每个mcu将包含四个亮度矩阵,一个色度矩阵及一个饱和度矩阵。 当图像数据分成一个8*8矩阵后,还必须将每个数值减去128,然后一一代入dct变换公式中,即可达到dct变换的目的。图像数据值必须减去128,是因为dct转换公式所接受的数字范围是在-128到+127之间。 dct变换公式: x,y代表图像数据矩阵内某个数值的坐标位置f(x,y)代表图像数据矩阵内的数个数值u,v代表dct变换后矩阵内某个数值的坐标位置f(u,v)代表dct变换后矩阵内的某个数值 u=0 且 v=0 c(u)c(v)=1/1.414 u>0 或 v>0 c(u)c(v)=1 经过dct变换后的矩阵数据自然数为频率系数,这些系数以f(0,0)的值最大,称为dc,其余的63个频率系数则多半是一些接近于0的正负浮点数,一概称之为ac。 3、量化 图像数据转换为频率系数后,还得接受一项量化程序,才能进入编码阶段。量化阶段需要两个8*8矩阵数据,一个是专门处理亮度的频率系数,另一个则是针对色度的频率系数,将频率系数除以量化矩阵的值,取得与商数最近的整数,即完成量化。 当频率系数经过量化后,将频率系数由浮点数转变为整数,这才便于执行最后的编码。不过,经过量化阶段后,所有数据只保留整数近似值,也就再度损失了一些数据内容,jpeg提供的量化表如下: 4、编码 huffman编码无专利权问题,成为jpeg最常用的编码方式,huffman编码通常是以完整的mcu来进行的。 编码时,每个矩阵数据的dc值与63个ac值,将分别使用不同的huffman编码表,而亮度与色度也需要不同的huffman编码表,所以一共需要四个编码表,才能顺利地完成jpeg编码工作。 dc编码 dc是彩采用差值脉冲编码调制的差值编码法,也就是在同一个图像分量中取得每个dc值与前一个dc值的差值来编码。dc采用差值脉冲编码的主要原因是由于在连续色调的图像中,其差值多半比原值小,对差值进行编码所需的位数,会比对原值进行编码所需的位数少许多。例如差值为5,它的二进制表示值为101,如果差值为-5,则先改为正整数5,再将其二进制转换成1的补数即可。所谓1的补数,就是将每个bit若值为0,便改成1;bit为1,则变成0。差值5应保留的位数为3,下表即列出差值所应保留的bit数与差值内容的对照。 在差值前端另外加入一些差值的霍夫曼码值,例如亮度差值为5(101)的位数为3,则霍夫曼码值应该是100,两者连接在一起即为100101。下列两份表格分别是亮度和色度dc差值的编码表。根据这两份表格内容,即可为dc差值加上霍夫曼码值,完成dc的编码工作。 ac编码 ac编码方式与dc略有不同,在ac编码之前,首先得将63个ac值按zig-zag排序,即按照下图箭头所指示的顺序串联起来。 63个ac值排列好的,将ac系数转换成中间符号,中间符号表示为rrrr/ssss,rrrr是指第非零的ac之前,其值为0的ac个数,ssss是指ac值所需的位数,ac系数的范围与ssss的对应关系与dc差值bits数与差值内容对照表相似。 如果连续为0的ac个数大于15,则用15/0来表示连续的16个0,15/0称为zrl(zero rum length),而(0/0)称为eob(enel of block)用来表示其后所剩余的ac系数皆等于0,以中间符号值作为索引值,从相应的ac编码表中找出适当的霍夫曼码值,再与ac值相连即可。 例如某一组亮度的中间符为5/3,ac值为4,首先以5/3为索引值,从亮度ac的huffman编码表中找到1111111110011110霍夫曼码值,于是加上原来100(4)即是用来取[5,4]的huffman编码1111111110011110100,[5,4]表示ac值为4的前面有5个零。 由于亮度ac,色度ac霍夫曼编码表比较长,在此省略去,有兴趣者可参阅相关书籍。 实现上述四个步骤,即完成一幅图像的jpeg压缩。 参考资料[1] 林福宗 《图像文件格式(上)――windows 编程》,清华大学出版社, 1996年[2] 李振辉、李仁各编著,《探索图像文件的奥秘》,清华大学出版社,1996年[3] 黎洪松、成实译《jpeg静止数据压缩标准》,学苑出版社,1996年
来源地址:http://hi.baidu.com/451526809/blog/item/eb7fcd36bdf55a350a55a9ae.html
发表评论
-
Javascript加密解密终级指南escape解密/eval加密/Encode加密原理
2012-01-20 01:39 1267Javascript加密解密终级指 ... -
autoit3简要笔记
2012-01-20 01:39 1428autoit3简要笔记 2011年02月11日 ... -
BAT命令大全
2012-01-20 01:39 533BAT命令大全 2010年11月11日 BAT命令大全 ... -
IIS修复工具,怎么完全卸载IIS
2012-01-20 01:38 537IIS修复工具,怎么完全卸 ... -
自动化测试-略懂
2012-01-20 01:38 539自动化测试-略懂 2010年09月14日 其实我目前是处 ... -
BMP位图结构解析
2012-01-19 09:28 672BMP位图结构解析 2010年1 ... -
如何使用 LoadImage() 读取 BMP 文件
2012-01-19 09:28 1263如何使用 LoadImage() 读取 BMP 文件 201 ... -
BMP位图文件的存储格式2
2012-01-19 09:28 728BMP位图文件的存储格式2 2011年06月18日 位图 ... -
保存bmp
2012-01-19 09:28 593保存bmp 2010年10月24日 ---------- ... -
AIX 性能调优-内存、CPU篇
2012-01-17 02:03 1441AIX 性能调优-内存、CPU篇 2011年04月25日 ... -
MTK(MTK内存、任务管理和定时器消息机制)
2012-01-17 02:03 1171MTK(MTK内存、任务管理和 ... -
VC编译器配置及编译选项
2012-01-17 02:03 542VC编译器配置及编译选 ... -
C# 路径,文件,目录,IO常见问题汇总 - wxbjs - 博客园
2012-01-17 02:03 1342C# 路径,文件,目录,IO常 ... -
WinCE驱动开发问题精华集锦
2012-01-17 02:03 514WinCE驱动开发问题精华 ... -
5月4日横滨アリ ナ跳跳+NYC CON 观后感
2012-01-15 21:25 6435月4日横滨アリ ナ跳跳+NYC CON 观后感 2011年 ... -
政治老妖婆(大家support 下下哈)
2012-01-15 21:25 560政治老妖婆(大家support 下下哈) 2009年11月1 ... -
日语听力词汇
2012-01-15 21:25 467日语听力词汇 2010年11月22日 动作、体态、姿势等 ... -
那些日子(一)
2012-01-15 21:25 566那些日子(一) 2009年06月30日 "吃不 ... -
那些点滴,世事无常
2012-01-15 21:25 430那些点滴,世事无常 2011 ...
相关推荐
图片转换工具JPG/BMP/ICO/GIF/PNG,超好用的图片转换工具,小巧实用
系统图标png/bmp/gif;200左右
create morphed images with TGA/IMG/BMP/GIF/IPI/PCX files(630KB)
vc 把BMP JPG GIF PNG 格式图片显示到PictureControl控件中。 带有实例工程vc2010下调试通过,共3中显示方式 显示png使用GDI+
各种图片解码说明,包括格式等,内含BMP/JPEG/GIF文档说明和相关解码算法以及在图像处理中的运用
DtPixel可以识别RAW/YUV/BMP/PNG/JPG,查看RAW图使用
MFC 动态加载图片,支持jpg\bmp\ico\等格式,只要修改一下,所有的格式都支持, 支持清除图片显示。
CPicture类利用IPicture接口实现显示图片 CPictureView类是窗口类,支持视图区滚动显示图片,简单的缩放功能。
介绍如何在linux下编译生成libjpeg库,然后调用libjpeg库将BMP图片转成JPG图片。 tar jvxf libtool-2.2.4.tar.bz2 cd libtool-2.2.4/ ./configure CC=arm-linux-gnu-gcc --build=i686-linux --host=arm-linux --...
赠送jar包:imageio-bmp-3.1.1.jar; 赠送原API文档:imageio-bmp-3.1.1-javadoc.jar; 赠送源代码:imageio-bmp-3.1.1-sources.jar; 赠送Maven依赖信息文件:imageio-bmp-3.1.1.pom; 包含翻译后的API文档:...
图片缩略Jar包---- 支持GIF|BMP|JPG|JPEG Linux、Windows下均正常运行。
X-Picture Converter是X-Picture家族软件的一员.X-Picture Converter是用来转换,压缩当前最流行的各种图形,图象格式的软件.您可以用很短的时间将要转换格式的图片快速处理完成.X-Picture Converter简洁的界面,简单的...
计算机软件-编程源码-BMP与JPG图象转换重新提供新的DLL.zip
pEGFP-N1/BMP-2真核表达质粒的构建与鉴定,张明磊,常非,目的 构建pEGFP-N1/BMP-2真核表达质粒,并进行鉴定。方法 利用RT-PCR方法从组织中提取骨形态发生蛋白(BMP-2)的基因片段,与pMD18-T载体连�
摘要:C#源码,图形图像,批量图片格式转换 C#批量转换图片格式,支持的图片格式为:BMP/JPG/PNG/GIF,为了使大批量的图像格式转换变的简单,因此开发出批量图像格式转换工具,图像格式转换主要通过Bitmap类的Save方法...
//bmp to gif void CConvertGIfDlg::OnBrown() { CFileDialog dlg(TRUE,"bmp",NULL,NULL,"位图文件(BMP)|*.bmp",this); if (dlg.DoModal()==IDOK) { m_FileName = dlg.GetPathName(); UpdateData(FALSE); ...
赠送jar包:littleproxy-1.1.0-beta-bmp-17.jar; 赠送原API文档:littleproxy-1.1.0-beta-bmp-17-javadoc.jar; 赠送源代码:littleproxy-1.1.0-beta-bmp-17-sources.jar; 赠送Maven依赖信息文件:littleproxy-...
图象文件转换器程序,可以使bmp,jpg,gif,tiff格式间相互转换(C#源代码编写) VS2008
您可以用它打开 BMP/GIF/JPG/PNG/PSD/AVI/CUR/ICO 等格式并将它们转换或混合为 GIF 格式,并保存为 BMP/GIF/JPG/PNG/PSD/AVI/CUR/ICO 甚至 SWF 格式。您还可以用它剪切、缩放、旋转导入的图像文件,调整帧的顺序和...
Longtec-长陆 BMP/BMA型双拖辊电子皮带秤选型手册rar,Longtec-长陆 BMP/BMA型双拖辊电子皮带秤选型手册