定义
便携式网络图形(Portable Network Graphics, PNG)是一种无损压缩的位图图形格式,支持索引、灰度、RGB三种颜色方案一级Alpha通道等特性。PNG的开发目标是改善并取代GIF作为适合网络传输的格式而不需要专利许可,所以被广泛用于互联网以及其他方面上。
文件结构
PNG图像格式文件由一个8字节的PNG文件标识(file signature)域和3个以上的后续数据块(IHDR、IDAT、IEND)组成。
PNG文件包括8字节文件署名(89 50 4E 47 0D 0A 1A 0A,十六进制),用来识别PNG格式。
十六进制 | 含义 |
---|---|
89 | 用于检测传输系统是否支持8位的字符编码(8 bit data),用以减少将文本文件被错误的识别成PNG文件的机会,反之亦然 |
50 4E 47 | PNG每个字母对应的ASCII,让用户可以使用文本编辑器查看时,识别出时PNG文件。 |
0D 0A | DOS风格的换行符(CRLF)。用于DOS-Unix数据的换行符转换。 |
1A | 在DOS命令行下,用于阻止文件显示的文件结束符。 |
0A | Unix风格的换行符(LF)。用于Unix-DOS换行符的转换。 |
数据块结构
PNG定义了两种类型的数据块:一种是PNG文件必须包含、读写软件也都必须要支持的关键块(critical chunk);另一种叫做辅助块(ancillary chunks),PNG允许软件忽略它不认识的附加块。这种基于数据块的设计,允许PNG格式在扩展时仍能保持与旧版本兼容。
1. 关键数据块
(1)关键数据块IHDR(header chunk): 它包含有PNG文件中存储的图像数据的基本信息,并要作为第一个数据块出现在PBG数据流中,而且第一个PNG数据流中只能有一个文件头数据块。
文件头数据块有13字节组成,它的格式如下表所示
域的名称 | 字节数 | 说明 |
---|---|---|
Width | 4 bytes | 图像宽度,以像素为单位 |
Height | 4 bytes | 图像高度,以像素为单位 |
Bit depth | 1 bytes | 图像深度:</br>索引彩色图像:1,2,4或8</br>灰度图像:1,2,4,8或16</br>真彩色图像:8或16 |
ColorType | 1 bytes | 颜色类型:</br>0:灰度图像, 1,2,4,8或16</br>2:真彩色图像,8或16</br>3:索引彩色图像,1,2,4或8</br>4:带α通道数据的灰度图像,8或16</br>6:带α通道数据的真彩色图像,8或16 |
Compression method | 1 bytes | 压缩方法(LZ77派生算法) |
Filter method | 1 bytes | 滤波器方法 |
Interlace method | 1 bytes | 隔行扫描方法: 0:非隔行扫描 1: Adam7(由Adam M. Costello开发的7遍隔行扫描方法) |
(2) 调色板数据块PLTE(palette chunk):它包含有与索引彩色图像((indexed-color image))相关的彩色变换数据,它仅与索引彩色图像有关,而且要放在图像数据块(image data chunk)之前。真彩色的PNG数据流也可以有调色板数据块,目的是便于非真彩色显示程序用它来量化图像数据,从而显示该图像。
域的名称 | 字节数 | 说明 |
---|---|---|
Red | 1 byte | 0 = 黑,255 = 红 |
Green | 1 byte | 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数据块放在最后面之外,其他数据块的存放顺序没有限制。
关键数据块中有4个标准数据块:
- 文件头数据块IHDR(header chunk):包含有图像基本信息,作为第一个数据块出现并只出现一次。
- 调色板数据块PLTE(palette chunk):必须放在图像数据块之前。
- 图像数据块IDAT(image data chunk):存储实际图像数据。PNG数据允许包含多个连续的图像数据块。
- 图像结束数据IEND(image trailer chunk):放在文件尾部,表示PNG数据流结束。
网友评论