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

辅助数据块

透明度

  • tRNS

    颜色空间

  • gAMA
  • cHRM
  • sRGB
  • iCCP

    文本信息

  • tEXt
  • zTXt
  • iTXt

    其他信息

  • bKGD 背景颜色
  • pHYs 物理像素尺寸
  • sBIT
  • sPLT
  • hIST
  • tIME

PNG图像分析工具

参考文档