目录
PNG概述
流式网络图形格式(Portable Network Graphic Format,PNG)是一种采用无损压缩算法的位图格式。PNG开发的目的是替代GIF和TIFF文件格式,并增加一些GIF文件格式所不具备的特性。PNG使用从LZ77派生的无损数据压缩算法。PNG在存储灰度图像时,灰度图像的深度可多到16位,在存储彩色图像时,彩色图像的深度可多到48位,同时还可存储多到16位的α通道数据。
PNG文件格式保留GIF文件格式的下列特性:
- 使用彩色查找表或者叫做调色板可支持256种颜色的彩色图像。
- 流式读/写性能:图像文件格式允许连续读出和写入图像数据。
- 逐次逼近显示:在通信链路上传输图像文件的同时就在终端上显示图像,把整个轮廓显示出来之后逐步显示图像的细节,也就是先用低分辨率显示图像,然后逐步提高它的分辨率。
- 透明性:图像中某些部分不显示出来,用来创建一些有特色的图像。
- 辅助信息:可用来在图像文件中存储一些文本注释信息。
- 独立于计算机软硬件环境。
- 使用无损压缩。
PNG文件格式中要增加下列GIF文件格式所没有的特性:
- 每个像素为48位的真彩色图像。
- 每个像素为16位的灰度图像。
- 可为灰度图和真彩色图添加α通道。
- 添加图像的γ信息。
- 使用循环冗余码(CRC)检测损害的文件。
- 加快图像显示的逐次逼近显示方式。
- 标准的读/写工具包。
- 可在一个文件中存储多幅图像。
PNG文件结构分析
PNG图像格式文件一个8字节的PNG文件署名域和按照特定结构组织的3个以上的数据块组成。
其中数据块,PNG定义了两种类,一种是关键数据块,即标准的数据块。关键数据块定义了4个标准数据块,每个PNG文件都必须包含它们,PNG读写软件也都必须要支持这些数据块。另一种叫做辅助数据块,是可选的数据块。
PNG文件署名域
8字节的PNG文件署名域用来识别该文件是不是PNG文件。在十六进制中一般为:
89 50 4E 47 0D 0A 1A 0A
关键数据块
- 文件头数据块IHDR
包含有PNG文件中存储的图像数据的基本信息,并要作为第一个数据块出现在PNG数据流中,而且一个PNG数据流中只能有一个文件头数据块。由13字节组成,格式如下表所示。
名称 | 字节数(byte) | 说明 |
Width | 4 | 宽度(像素) |
Height | 4 | 高度(像素) |
Bit Depth | 1 | 图像深度 |
Color Type | 1 | 颜色类型 |
Compression method | 1 | 压缩方法 |
Filter method | 1 | 滤波器方法 |
Interlace mthod | 1 | 隔行扫描方法 |
- 调色板数据块PLTE
包含有与索引彩色图像相关的彩色变换数据,它仅与索引彩色图像有关,而且要放在图像数据块之前。真彩色的PNG数据流也可以有调色板数据块,目的是便于非真彩色显示程序用它来量化图像数据,从而显示该图像。
调色板实际是一个彩色索引查找表,它的表项数目可以是1~256中的一个数,每个表项有3字节,因此调色板数据块所包含的最大字节数为768。调色板数据块结构下表所示。
颜色 | 字节(Byte) | 说明 |
Red | 1 | 0 = 黑色 255 = 红色 |
Green | 1 | 0 = 黑色 255 = 绿色 |
Blue | 1 | 0 = 黑色 255 = 蓝色 |
- 图像数据块IDAT
存储实际的数据,在数据流中可包含多个连续顺序的图像数据块。
- 图像结束数据IEND
用来标记PNG文件或者数据流已经结束,并且必须要放在文件的尾部。
辅助数据块
- 背景颜色数据块bKGD
- 基色和白色度数据块cHRM
- 图像γ数据块gAMA
- 图像直方图数据块hIST
- 物理像素尺寸数据块pHYs
- 样本有效位数据块sBIT
- 文本信息数据块tEXt
- 图像最后修改时间数据块tIME
- 图像透明数据块tRNS
- 压缩文本数据块zTXt
根据实际PNG图像的格式结构分析
根据Java程序得到所选择的PNG图像的16进制信息。并找到可以确定位置的文件署名域、IHDR数据块和IEND数据块进行分析
PNG文件署名域
PNG文件开头的统一的固定的文件标识位。
IHDR数据块
第一行: 00 00 00 0D 表示IHDR数据块总长度为13字节
第二行: 49 48 44 52 为IHDR数据块标识
第三行: 00 00 06 B6 表示图像宽度1718像素
第四行: 00 00 04 8E 表示图像高度1166像素
第五行:08 表示图像色深,该图像为真彩色图像
第六行:06 表示颜色类型,该图像为带α通道数据的真彩色图像
第七行:00 表示压缩方法,该图像使用LZ77派生算法,目前规定为0
第八行:00 表示滤波器方法
第九行:00 表示隔行扫描方法,该图像使用非隔行扫描
第十行:CRC校验位
IEND数据块
PNG文件结尾处固定的12个字节,标记PNG文件或者数据流已经结束。