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个辅助数据块是:
- bKGD:背景颜色数据块。
- cHRM:基色和白色度数据块。
- gAMA:图像γ数据块。
- hIST:图像直方图数据块。
- pHYs:物理像素尺寸数据块。
- sBIT:样本有效位数据块。
- tEXt:文本信息数据块。
- tIME :图像最后修改时间数据块。
- tRNS:图像透明数据块。
- zTXt :压缩文本数据块。