目录
(一)PNG图像特性:
- 体积小 网络通讯中因受带宽制约,在保证图片清晰、逼真的前提下,网页中不可能大范围的使用文件较大的bmp格式文件。
- 无损压缩 PNG文件采用LZ77算法的派生算法进行压缩,其结果是获得高的压缩比,不损失数据。它利用特殊的编码方法标记重复出现的数据,因而对图像的颜色没有影响,也不可能产生颜色的损失,这样就可以重复保存而不降低图像质量。
- 索引彩色模式 PNG-8格式与GIF图像类似,同样采用8位调色板将RGB彩色图像转换为索引彩色图像。图像中保存的不再是各个像素的彩色信息,而是从图像中挑选出来的具有代表性的颜色编号,每一编号对应一种颜色,图像的数据量也因此减少,这对彩色图像的传播非常有利。
- 更优化的网络传输显示 PNG图像在浏览器上采用流式浏览,即使经过交错处理的图像会在完全下载之前提供浏览者一个基本的图像内容,然后再逐渐清晰起来。它允许连续读出和写入图像数据,这个特性很适合于在通信过程中显示和生成图像。
- 支持透明效果 PNG可以为原图像定义256个透明层次,使得彩色图像的边缘能与任何背景平滑地融合,从而彻底地消除锯齿边缘。这种功能是GIF和JPEG没有的。
- PNG同时还支持真彩和灰度级图像的Alpha通道透明度,最高支持24位真彩色图像以及8位灰度图像,支持Alpha通道的透明/半透明特性,支持图像亮度的Gamma校准信息。
(二)数据块结构
- PNG图像格式文件由一个8字节的PNG文件署名(PNG file signature)域和按照特定结构组织的3个以上的数据块(chunk)组成。
- PNG定义了两种类型的数据块,一种是称为关键数据块(critical chunk),这是必需的数据块,另一种叫做辅助数据块(ancillary chunks),这是可选的数据块。关键数据块定义了4个标准数据块,每个PNG文件都必须包含它们,PNG读写软件也都必须要支持这些数据块。虽然PNG文件规范没有要求PNG编译码器对可选数据块进行编码和译码,但规范提倡支持可选数据块。
- PLTE数据块是定义图像的调色板信息,PLTE可以包含1~256个调色板信息,每一个调色板信息由3个字节组成,因此调色板的长度应该是3的倍数,否则,这将是一个非法的调色板。对于索引图像,调色板的颜色索引从0开始编号,依次为1、2……,调色板的颜色数不能超过色深中规定的颜色数(如图像色深为3的时候,调色板中的颜色数不可以超过2^3=8),否则,这将导致PNG图像不合法
- 图像数据块IDAT(image data chunk):它存储实际的数据,在数据流中可包含多个连续顺序的图像数据块。IDAT存放着图像真正的数据信息,因此,如果能够了解IDAT的结构,我们就可以很方便的生成PNG图像。
- 图像结束数据IEND(image trailer chunk):它用来标记PNG文件或者数据流已经结束,并且必须要放在文件的尾部。文件的结尾12个字符如下:00 00 00 00 49 45 4E 44 AE 42 60 82,由于数据块结构的定义,IEND数据块的长度总是0(00 00 00 00,除非人为加入信息),数据标识总是IEND(49 45 4E 44),因此,CRC码也总是AE 42 60 82。
- PNG文件格式规范制定的10个辅助数据块:(1)背景颜色数据块bKGD(background color);(2)基色和白色度数据块cHRM(primary chromaticities and white point)。所谓白色度是指当R=G=B=最大值时在显示器上产生的白色度;(3)图像γ数据块gAMA(image gamma);(4)图像直方图数据块hIST(image histogram);(5)物理像素尺寸数据块pHYs(physical pixel dimensions);(6)样本有效位数据块sBIT(significant bits);(7)文本信息数据块tEXt(textual data);(8)图像最后修改时间数据块tIME(image lastmodification time);(9)图像透明数据块tRNS(transparency);(10)压缩文本数据块zTXt(compressed textual data)。
(三)PNG格式
- PNG格式有8位、24位、32位三种形式,其中8位PNG支持两种不同的透明形式(索引透明和alpha透明),24位PNG不支持透明,32位PNG在24位基础上增加了8位透明通道,因此可展现256级透明程度。
- PNG8和PNG24后面的数字则是代表这种PNG格式最多可以索引和存储的颜色值。8代表2的8次方也就是256色,而24则代表2的24次方大概有1600多万色。
(四)PNG文件存储格式
- 文件头数据块IHDR(header chunk):它包含有PNG文件中存储的图像数据的基本信息,并要作为第一个数据块出现在PNG数据流中,而且一个PNG数据流中只能有一个文件头数据块
(五)PNG图像解析
对下图小刘鸭图片进行PNG测试:
解析结果如下:
- PNG文件头部总是由位固定的字节来描述的,HEX: 89 50 4E 47 0D 0A 1A 0A其对应十进制137 80 78 73 13 10 26是PNG Signature部分,表示此文件为PNG文件,其中第一个字0x89超出了ASCII字符的范围,这是为了避免某些软件将PNG文件当做文本文件来处理;
- 00 00 00 0d表示Chunk Data长度为13字节;49 48 44 52表示IHDR(文件头数据块)标识;
- 00 00 00 00 49 45 4E 42 60 82为图像结束数据,表示PNG文件或数据流已经结束;
- 宽:00 00 03 E8
- 高:00 00 03 E8
- 深度:8位;颜色类型:0x02(即索引彩色图像)
- CRC校验:C1 C2 43 B3