一.PNG的文件结构
PNG图像格式由文件署名和数据块(chunk)组成
二.判断PNG文件
PNG文件署名域可用来识别该文件是否为PNG文件。
注:PNG文件的文件署名为固定的 89 50 4E 47 0D 0A 1A 0A
本次作业采用PNG图片为:
用FlexHEX打开该PNG图片后,得到:
可知该图片文件确为PNG图像格式。
三.数据块的分类及其格式
PNG文件含有关键数据块(critical chunk)和辅助数据块(ancillary chunks)两种类型的数据块 ,每个数据块由4个部分组成。
名称 | 字节数 | 说明 |
Length(长度) | 4 | 指定数据块中数据域的长度,其长度不超过( |
Chunk Type Code(数据块类型码) | 4 | 数据块类型码由ASCII字母(A-Z和a-z)组成 |
Chunk Data(数据块数据) | 可变长度 | 存储按照Chunk Type Code指定的数据 |
CRC(循环校验码) | 4 | 存储用来检测是否有错误的循环冗余码 |
1.关键数据块及其作用
PNG关键数据块中有4个标准数据块
1)文件头数据块IHDR
IHDR包含PNG文件中存储的图像数据的基本信息,是PNG数据流中的第一个数据块,并且每个PNG数据流中有且只能有一个IHDR,大小为13bytes。
其组成为:
名称 | 字节数 | 说明 |
Width | 4 | 图像宽度,以像素为单位 |
Height | 4 | 图像高度,以像素为单位 |
Bit depth | 1 | 图像深度: 索引彩色图像:1,2,4,8 灰度图像:1,2,4,8,16 真彩色图像:8,16 |
Color Type | 1 | 颜色类型: 0:灰度图像,1,2,4,8,16 2:真彩色图像,8,16 3:索引彩色图像,1,2,4,8 4:带α通道数据的灰度图像,8,16 6:带α通道数据的真彩色图像,8,16 |
Compression method | 1 | 压缩方法(LZ77)派生算法 |
Filter method | 1 | 滤波器方法 |
Interlace method | 1 | 隔行扫描方法: 0:非隔行扫描方法 1:Adam7 |
在本次作业采用的PNG文件对应的二进制文件中对应位置的数据:
名称 | 数值 | 说明 |
Length | ![]() | 大小为0×0D,与IHDR的13字节对应,说明此数据块确实是IHDR数据块 |
Chunk Type Code | ![]() | 表明该数据块是IHDR数据块 |
Width | ![]() | 图像宽度为0×0438,即1080像素 |
Height | ![]() | 图像高度为0×0438,即1080像素 |
Bit depth | ![]() | 图像深度为8位 |
Color Type | ![]() | 颜色类型为0×06,即图像为带α通道数据的真彩色图像 |
Compression method | ![]() | 0x00 |
Filter method | ![]() | 0x00 |
Interlace method | ![]() | 0x00 |
CRC | ![]() | EC 10 6C 8F |
2)调色板数据块PLTE
PLTE包含有与索引彩色图像相关的彩色变换数据,它仅与索引彩色图像有关,而且放在图像数据块之前。
PLTE数据块是定义图像的调色板信息,PLTE可以包含1~256个调色板信息,每个调色板信息由3个字节组成:
颜色 | 字节 | 意义 |
Red | 1 | 0=黑,255=红 |
Green | 1 | 0=黑,255=绿 |
Blue | 1 | 0=黑,255=蓝 |
由于本次作业采用的PNG文件是带α通道数据的真彩色图像,故没有调色板数据块。
但对于索引图象,调色板信息是必须的。
PNG图像不合法的情况:调色板的长度不是3的倍数;调色板的颜色数超过了色深中规定的颜色数(假如颜色数为n,则调色板的颜色数不得超过)
3)图像数据块IDAT
IDAT存储实际的数据,在数据流中可包含多个连续顺序的图像数据块。
4)图像结束数据IEND
IEND用来标记PNG文件或者数据流已经结束,并且必须要放在文件的尾部。
规定为:00 00 00 00 49 45 4E 44 AE 42 60 82
本次作业采用的例子:
与IEND一致。
2.辅助数据块
PNG规定了10个辅助数据块
- 背景颜色数据块BKGD
- 基色和白色度数据块CHRM
- 图像γ数据块GAMA
- 图像直方图数据块HIST
- 物理像素尺寸数据块PHYS
- 样本有效位数据块SBIT
- 文本信息数据块TEXT
- 图像最后修改时间数据块TIME
- 图像透明数据块TRNS
- 压缩文本数据块ZTXT