一、PNG格式概述
png是一种无损压缩的位图片形格式。设计目的是为了替代GIF和TIFF文件格式,同时增加一些GIF文件格式所不具备的特性。
png格式是非失真性压缩的,允许使用类似于GIF格式的调色板技术,支持真彩色图像,并具备阿尔法通道(半透明)等特性。png使用从LZ77派生的无损数据压缩算法,由于它压缩比高,生成文件体积小,一般被应用于JAVA程序、网页或S60程序中。
二、PNG格式基本结构
文件署名域 | PNG数据块 | …… | PNG数据块 |
1.文件署名域
对于一个PNG文件,其文件头由8位固定的字节描述,即为文件署名域,用于识别该文件类型。
十进制数 | 137 80 78 71 13 10 26 10 |
十六进制数 | 89 50 4E 47 0D 0A 1A 0A |
2.PNG数据块
1)数据块结构
名称 | 字节 | 说明 |
Length (长度) | 4 | 指定数据块中数据域的长度,其长度不超过(231-1)字节 |
Chunk Type Code (数据块类型码) | 4 | 数据块类型码由ASCII字母(A-Z和a-z)组成 |
Chunk Data (数据块数据) | 可变 | 存储按照Chunk Type Code指定的数据 |
CRC (循环冗余检测) | 4 | 存储用来检测是否有错误的循环冗余码 |
2)数据块类型
关键数据块:即标准数据块
辅助数据块:即可选数据块
3)关键数据块的结构
文件头数据块IHDR:它包含有PNG文件中存储的图像数据的基本信息,并要作为第一个数据块出现在PNG数据流中,而且一个PNG数据流中只能有一个文件头数据块。
文件头数据块数据域由13字节组成。格式如下。
调色数据块PLET:调色板数据块PLTE(palette chunk)包含有与索引彩色图像(indexed-color image)相关的彩色变换数据,它仅与索引彩色图像有关,而且要放在图像数据块(image data chunk)之前。
PLTE数据块是定义图像的调色板信息,PLTE可以包含1~256个调色板信息,每一个调色板信息由3个字节组成,如下表。
颜色 | 字节 | 意义 |
红 | 1 byte | 0=黑,255=红 |
绿 | 1 byte | 0=黑,255=绿 |
蓝 | 1 byte | 0=黑,255=蓝 |
对于索引图像,调色板信息是必须的,调色板的颜色索引从0开始编号,然后是1、2……,调色板的颜色数不能超过色深中规定的颜色数(如图像色深为4的时候,调色板中的颜色数不可以超过2^4=16),否则非法。
真彩色图像和带α通道数据的真彩色图像也可以有调色板数据块,目的是便于非真彩色显示程序用它来量化图像数据,从而显示该图像。
图像数据块IDAT:存储实际的数据,在数据流中可包含多个连续顺序的图像数据块。
图像结束数据块IEND:用来标记PNG文件或者数据流已经结束,并且必须要放在文件的尾部。
4)辅助数据块结构
三、PNG特点
1.体积小 网络通讯中因受带宽制约,在保证图片清晰、逼真的前提下,网页中不可能大范围的使用文件较大的bmp格式文件。
2.无损压缩 PNG文件采用LZ77算法的派生算法进行压缩,其结果是获得高的压缩比,不损失数据。它利用特殊的编码方法标记重复出现的数据,因而对图像的颜色没有影响,也不可能产生颜色的损失,这样就可以重复保存而不降低图像质量。
3.索引彩色模式 PNG-8格式与GIF图像类似,同样采用8位调色板将RGB彩色图像转换为索引彩色图像。图像中保存的不再是各个像素的彩色信息,而是从图像中挑选出来的具有代表性的颜色编号,每一编号对应一种颜色,图像的数据量也因此减少,这对彩色图像的传播非常有利。
4.更优化的网络传输显示 PNG图像在浏览器上采用流式浏览,即使经过交错处理的图像会在完全下载之前提供浏览者一个基本的图像内容,然后再逐渐清晰起来。它允许连续读出和写入图像数据,这个特性很适合于在通信过程中显示和生成图像。
5.支持透明效果 PNG可以为原图像定义256个透明层次,使得彩色图像的边缘能与任何背景平滑地融合,从而彻底地消除锯齿边缘。这种功能是GIF和JPEG没有的。