PNG图像的压缩算法

PNG图像的压缩算法

ID:40489712

大小:56.64 KB

页数:5页

时间:2019-08-03

PNG图像的压缩算法_第1页
PNG图像的压缩算法_第2页
PNG图像的压缩算法_第3页
PNG图像的压缩算法_第4页
PNG图像的压缩算法_第5页
资源描述:

《PNG图像的压缩算法》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、PNG图像格式的压缩算法便携式网络图形(PortableNetworkGraphics)简称为PNG,它是一种无损压缩的位图图形格式,其含有以下几种特性:1、支持256色调色板技术以产生小体积文件2、支持最高48位真彩色图像以及16位灰度图像3、支持阿尔法通道(AlphaChannel,表示图片的透明度和半透明度)的透明/半透明性4、支持图像亮度的伽马校正(Gamma校准,用来针对影片或是影像系统里对于光线的辉度(luminance)或是三色刺激值(tristimulusvalues)所进行非线性的运算或反运算)信息5、使用了无损压缩的算法6、使用了循环冗余校验(CRC,用来

2、检测或校验数据传输或者保存后可能出现的错误)防止文件出错一、PNG格式的文件结构PNG定义了两种类型的数据块:一种是PNG文件必须包含、读写软件也都必须要支持的关键块(criticalchunk);另一种叫做辅助块(ancillarychunks),PNG允许软件忽略它不认识的附加块。这种基于数据块的设计,允许PNG格式在扩展时仍能保持与旧版本兼容。关键数据块中有4个标准数据块:1、文件头数据块IHDR(headerchunk):包含有图像基本信息,作为第一个数据块出现并只出现一次。2、调色板数据块PLTE(palettechunk):必须放在图像数据块之前。3、图像数据块I

3、DAT(imagedatachunk):存储实际图像数据。PNG数据允许包含多个连续的图像数据块。4、图像结束数据IEND(imagetrailerchunk):放在文件尾部,表示PNG数据流结束二、PNG格式文件的压缩算法PNG格式文件采用的是从LZ77派生的一个称为DEFLATE的非专利无失真式压缩算法,这个算法对图像里的直线进行预测然后存储颜色差值,这使得PNG经常能获得比原始图像更大的压缩率。PNG算法的压缩过程一般有以下几个步骤:1、图像信息由数据过滤器(deltafiltering)进行处理,deltafiltering是一个无损的数据过滤算法,它不会改变图像信息

4、的大小,但是会让图像信息具有更高的可压缩性。2、被处理过的数据将会用Ziv-Lempel(LZ77)算法进行处理,处理后的数据被Huffman算法压缩,得到最后的PNG格式的图像数据,过程可用下图表示。(1)LZ77压缩算法原理为了更好地说明LZ77算法的原理,首先介绍算法中用到的几个术语:1.输入数据流(inputstream):要被压缩的字符序列。2.字符(character):输入数据流中的基本单元。3.编码位置(codingposition):输入数据流中当前要编码的字符位置,指前向缓冲存储器中的开始字符。4.前向缓冲存储器(Lookaheadbuffer):存放从编

5、码位置到输入数据流结束的字符序列的存储器。5.窗口(window):指包含W个字符的窗口,字符是从编码位置开始向后数也就是最后处理的字符数。6.指针(pointer):指向窗口中的匹配串且含长度的指针。LZ77编码算法的核心是查找从前向缓冲存储器开始的最长的匹配串。编码算法的具体执行步骤如下:1.把编码位置设置到输入数据流的开始位置。2.查找窗口中最长的匹配串。3.以“(Pointer,Length)Characters”的格式输出,其中Pointer是指向窗口中匹配串的指针,Length表示匹配字符的长度,Characters是前向缓冲存储器中的不匹配的第1个字符。4.如果

6、前向缓冲存储器不是空的,则把编码位置和窗口向前移(Length+1)个字符,然后返回到步骤2(2)使用LZ77算法进行压缩如果当前处理开始字节的串在窗口中有匹配串,就先输出一个标志位,表明下面是一个(之间的距离,匹配长度)对,然后输出(之间的距离,匹配长度)对,再从刚才处理完的串之后的下一个字节继续处理。如果当前处理字节开始的串在窗口中没有匹配串,就先输出一个标志位,表明下面是一个没有改动的字节,然后不做改动的输出当前处理字节,再继续处理下一个字节。伪代码如下:·压缩一段字节流,src-源数据区,srclen-源数据区字节长度,dest-压缩数据区,返回值>0压缩数据长度,返

7、回值=0数据无法压缩,返回值<0压缩中异常错误intCCompressLZ77::Compress(BYTE*src,intsrclen,BYTE*dest){CurByte<-0CurBit<-0pWnd<-src;_InitSortTable()·初始化索引表,释放上次压缩用的空间fori<-0tosrclendoifCurByte>=srclenreturn0;doif_SeekPhase(src,srclen,i,&off,&len)·_SeekPhase(BYTE*src,intsrclen,

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。