2-2 PNG图片格式详解

 

1. PNG格式文件简介

 

PNG(Portable Network Graphics,便携式网络图形),是一种采用无损压缩算法的位图格式。其设计目的是试图替代GIF和TIFF文件格式,同时增加一些GIF文件格式所不具备的特性。一般应用于JAVA程序、网页或S60程序中,原因是它压缩比高,生成文件体积小。

 

 

2. PNG文件结构详解

 

PNG图像格式文件由以下结构组成:

  • 文件头/文件署名域:一个8字节的PNG文件署名域(即文件头)
  • 数据块:按照特定结构组织的3个以上的数据块组成

 

2.1 文件署名域

实际上就是PNG文件的文件头。PNG用8字节的文件署名域来识别该文件是不是PNG文件。

文件头/文件署名域:89 50 4e 47 0d 0a 1a 0a

 

2.2 数据块

 

2.2.1 数据块结构:

PNG文件中,每个数据块由4个部分组成,如下:

名称

字节数

说明

Length (长度)

4字节

指定数据块中数据域的长度,其长度不超过(231-1)字节

Chunk Type Code (数据块类型码)

4字节

数据块类型码由ASCII字母(A-Z和a-z)组成

Chunk Data (数据块数据)

可变长度

存储按照Chunk Type Code指定的数据

CRC (循环冗余检测)

4字节

存储用来检测是否有错误的循环冗余码

 

2.2.2 数据块类型:

PNG定义了两种类型的数据块:一种是称为关键数据块(必需的数据块),另一种是辅助数据块(可选的数据块)。

关键数据块定义了4个标准数据块,每个PNG文件都必须包含它们,PNG读写软件也都必须要支持这些数据块。

1. 关键数据块:

  • IHD:文件头数据块。它包含有PNG文件中存储的图像数据的基本信息,并要作为第一个数据块出现在PNG数据流中,而且一个PNG数据流中只能有一个文件头数据块。
  • PLTE:调色板数据块。对于索引图像来说,调色板信息是必须的,它包含有与索引彩色图像相关的彩色变换数据,而且要放在图像数据块IDAT之前。
  • IDAT:图像数据块。它存储实际的数据,在数据流中可包含多个连续顺序的图像数据块。IDAT存放着图像真正的数据信息,因此,如果能够了解IDAT的结构,我们就可以很方便的生成PNG图像。
  • IEND:图像结束数据。用来标记PNG文件或者数据流已经结束,必须要放在文件的尾部。

2. 辅助数据块:

比较杂,不需要全部了解透。PNG文件格式规范制定的10个辅助数据块是:

  1. bKGD:背景颜色数据块。
  2. cHRM:基色和白色度数据块。
  3. gAMA:图像γ数据块。
  4. hIST:图像直方图数据块。
  5. pHYs:物理像素尺寸数据块。
  6. sBIT:样本有效位数据块。
  7. tEXt:文本信息数据块。
  8. tIME :图像最后修改时间数据块。
  9. tRNS:图像透明数据块。
  10. zTXt :压缩文本数据块。