png图片结构分析
PNG文件结构分析
便携式网络图形(Portable Network Graphocs,PNG)是一种无损压缩的位图图形格式,支持索引、灰度、RGB三种颜色方案以及Alpha通道等特性。本文着重分析文件结构。
文件结构
PNG图像格式文件由一个8字节的PNG文件标识(file signature)域和3个以上的后续数据块(chunk)组成。一个有效的PNG图片必须包含一个IHDR、一个或多个IDAT、一个IEND。
八字节文件标识域
文件标识域:89 50 4E 47 0D 0A 1A 0A
十六进制 | 含义 |
---|---|
89 | 用于检测传输系统是否支持8位的字符编码,用以减少将文本文件被错误的识别成PNG文件机会 |
50 4E 47 | PNG每个字母对应的ASCALL,让用户可以使用文本编辑器查看,识别出事PNG文件 |
0D 0A | DOS风格的换行符(CRLF) |
1A | 在DOS命令行下,用于阻止文件显示的文件结束符 |
0A | Unix风格的的换行符(LF) |
数据块格式
PNG定义了两种类型的数据块,一种是PNG文件必须包含、读写软件也都必须支持的关键块,另一种是辅助块。这样可以保持向下兼容。
数据块结构如下:
LENGTH+CHUNK TYPE+CHUNK DATA+CRC
域 | 说明 |
---|---|
length | 4字节 只代表数据域长度 |
Chunk Type | 4字节 块类型 |
Chunk Data | 长度不固定,数据块数据 |
CRC | 4字节 Chunk Type域和Chunk Data域的CRC校验值 |
关键数据块
PNG定义了两种类型的数据块,一种是PNG文件必须包含、读写软件也都必须支持的关键块,另一种是辅助块。这样可以保持向下兼容。
关键数据块中有四个标准数据块
标准数据块 | 出现次数 | 含义 |
---|---|---|
文件头数据块IHDR | 1 | 包含图像基本信息,作为第一个数据块出现并只出现一次 |
调色板数据块PLTE | 1 | 必须放在图像数据块之前 |
图像数据块IDAT | N | 存储实际图像数据。PNG数据允许包含的多个连续的图像数据块 |
图像结束数据块IEND | 1 | 放在文件尾部,表示PNG数据流结束 |
文件头数据块IHDR
IHDR数据块应是第一个数据块
长度 | 含义 |
---|---|
4字节 | 图像宽度 |
4字节 | 图像高度 |
1字节 | 色深 |
1字节 | 颜色类型 |
1字节 | 压缩方法 |
1字节 | 过滤方法 |
1字节 | 隔行扫描法 |
调色板数据块PLTE
图像数据块IDAT
4字节块类型域值:49 44 41 54
图像结束数据块IEND
必须是最后一个数据块。代表PNG数据流的结束。Chunk Data域为空。
4字节的块类型域值为: 49 45 4E 44
辅助数据块
透明度
PNG图像分析工具
- TweakPNG
- 010 Editor PNG模板