PNG,可移植网络图形格式(Portable Network Graphic Format,PNG)名称来源于非官方的“PNG’s Not GIF”,是一种位图文件(bitmap file)存储格式。PNG用来存储灰度图像时,灰度图像的深度可多到16位,存储彩色图像时,彩色图像的深度可多到48位,并且还可存储多到16位的α通道数据。
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多万色。
格式 | 最高支持色彩通道 | 索引色编辑支持 | 透明支持 |
PNG8 | 256索引色 | 支持 | 支持设定特定索引色为透明色(布尔透明) 支持为索引色附加8位透明度(256阶alpha透明) |
PNG24 | 约1600万色 | 不支持 | 不支持 |
PNG32 | 约1600万色 | 不支持 | 支持8位透明度(256阶alpha透明) |
PNG文件格式保留GIF文件格式的下列特性:
- 使用彩色查找表或者叫做调色板可支持256种颜色的彩色图像;
- 流式读/写性能(streamability):图像文件格式允许连续读出和写入图像数据,这个特性很适合于在通信过程中生成和显示图像;
- 逐次逼近显示(progressive display):这种特性可使在通信链路上传输图像文件的同时就在终端上显示图像,把整个轮廓显示出来之后逐步显示图像的细节,也就是先用低分辨率显示图像,然后逐步提高它的分辨率;
- 透明性(transparency):这个性能可使图像中某些部分不显示出来,用来创建一些有特色的图像。
- 辅助信息(ancillary information):这个特性可用来在图像文件中存储一些文本注释信息;
- 独立于计算机软硬件环境;
- 使用无损压缩。
PNG文件格式中要增加下列GIF文件格式所没有的特性:
- 每个像素为48位的真彩色图像;
- 每个像素为16位的灰度图像;
- 可为灰度图和真彩色图添加α通道;
- 添加图像的γ信息;
- 使用循环冗余码(cyclic redundancy code,CRC)检测损害的文件;
- 加快图像显示的逐次逼近显示方式;
- 标准的读/写工具包;
- 可在一个文件中存储多幅图像。
文件结构
PNG图像格式文件(或者称为数据流)由一个8字节的PNG文件署名(PNG file signature)域和按照特定结构组织的3个以上的数据块(chunk)组成。
PNG定义了两种类型的数据块,一种是称为关键数据块(critical chunk),这是标准的数据块,另一种叫做辅助数据块(ancillary chunks),这是可选的数据块。关键数据块定义了4个标准数据块,每个PNG文件都必须包含它们,PNG读写软件也都必须要支持这些数据块。虽然PNG文件规范没有要求PNG编译码器对可选数据块进行编码和译码,但规范提倡支持可选数据块。
十进制数 | 137 | 80 | 78 | 71 | 13 | 10 | 26 | 10 |
十六进制数 | 89 | 50 | 4e | 47 | 0d | 0a | 1a | 0a |
其中第一个字节0x89超出了ASCII字符的范围,这是为了避免某些软件将PNG文件当做文本文件来处理。文件中剩余的部分由3个以上的PNG的数据块(Chunk)按照特定的顺序组成,因此,一个标准的PNG文件结构应该如下:
PNG文件标志 | PNG数据块 | … | PNG数据块 |