(1) PNG文件署名域8字节的PNG文件署名域用来识别该文件是不是PNG文件。该域的值是:十进制数137 80 78 71 1310 26 10十六进制数89 50 4e 47 0d 0a 1a 0a(2)数据块的结构每个数据块都由表6-07所示的的4个域组成。表6-07 PNG文件数据块的结构名称 字节数 说明Length(长度) 4字节 指定数据块中数据域的长度,其长度不超过(231-1)字节Chunk Type Code(数据块类型码) 4字节数据块类型码由ASCII字母(A-Z和a-z)组成Chunk Data(数据块数据) 可变长度 存储按照Chunk Type Code指定的数据CRC(循环冗余检测) 4字节 存储用来检测是否有错误的循环冗余码在表6-07中,CRC(cyclic redundancy check)域中的值是对Chunk Type Code域和Chunk Data域中的数据进行计算得到的。CRC具体算法定义在ISO 3309和ITU-T V.42中,其值按下面的CRC码生成多项式进行计算:x32+x26+x23+x22+x16+x12+x11+x10+x8+x7+x5+x4+x2+x+1PNG格式有8位、24位、32位三种形式,其中8位PNG支持两种不同 的透明形式(索引透明和alpha透明),24位PNG不支持透明,32位 PNG在24位基础上增加了8位透明通道,因此可展现256级透明程度。PNG与GIF对比PNG使用了从LZ77派生的一个非专利无失真式压缩算法(名为deflation)。这个算法对图像里的直线进行预测然后存储颜色差值,这使得PNG经常能获得比原始图像甚至比GIF更大的压缩率。但也有一些软件不能使用适合的预测而造成过分臃肿的PNG文件。关键数据块关键数据块中的4个标准数据块是:(1)文件头数据块IHDR(header chunk):它包含有PNG文件中存储的图像数据的基本信息,并要作为第一个数据块出现在PNG数据流中,而且一个PNG数据流中只能有一个文件头数据块。文件头数据块由13字节组成,它的格式如表6-08所示。表6-08 PNG文件头键数据块的结构域的名称 字节数 说明Width 4 bytes图像宽度,以像素为单位Height 4 bytes 图像高度,以像素为单位Bit depth 1 byte图像深度:灰度图像:1,2,4,8或16真彩色图像:8或16ColorType 1 byte 颜色类型:0:灰度图像,1,2,4,8或162:真彩色图像,8或163:索引彩色图像,1,2,4或8 4:带α通道数据的灰度图像,8或166:带α通道数据的真彩色图像,8或16Compression method 1 byte 压缩方法(LZ77派生算法)Filter method 1 byte 滤波器方法Interlace method 1 byte隔行扫描方法:0:非隔行扫描1:Adam7(由Adam M. Costello开发的7遍隔行扫描方法)(2)调色板数据块PLTE(palette chunk):它包含有与索引彩色图像((indexed-color image))相关的彩色变换数据,它仅与索引彩色图像有关,而且要放在图像数据块(image data chunk)之前。真彩色的PNG数据流也可以有调色板数据块,目的是便于非真彩色显示程序用它来量化图像数据,从而显示该图像。调色板数据块结构如表6-09所示。调色板数据块结构域的名称 字节数 说明Red 1 byte 0 = 黑,255 = 红Green "> 0 = 黑,255 = 绿Blue 1 byte 0 = 黑,255 = 蓝调色板实际是一个彩色索引查找表,它的表项数目可以是1~256中的一个数,每个表项有3字节,因此调色板数据块所包含的最大字节数为768。(3) 图像数据块IDAT(image data chunk):它存储实际的数据,在数据流中可包含多个连续顺序的图像数据块。(4) 图像结束数据IEND(image trailer chunk):它用来标记PNG文件或者数据流已经结束,并且必须要放在文件的尾部。除了表示数据块开始的IHDR必须放在最前面, 表示PNG文件结束的IEND数据块放在最后面之外,其他数据块的存放顺序没有限制。辅助数据块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 last-modification time)。(9) 图像透明数据块tRNS (transparency)。(10) 压缩文本数据块zTXt (compressed textual data)。