目录
一、概述
PNG是20世纪90年代中期开始开发的图像文件存储格式,其目的是替代GIF和TIFF文件格式,同时增加一些GIF文件格式所不具备的特性。PNG用来存储灰度图像时,灰度图像的深度可多到16位,存储彩色图像时,彩色图像的深度可多到48位,并且还可存储多到16位的α通道数据。PNG使用从LZ77派生的无损数据压缩算法。
二、文件结构
PNG文件头总是由位固定的字节来描述的,HEX: 89 50 4E 47 0D 0A 1A 0A
其中第一个字节0x89超出了ASCII字符的范围,是为了避免软件将PNG文件当做文本文件来处理。一个标准的PNG文件结构由文件头和至少3个按照特定的顺序组成的数据块构成。
2.1 PNG数据块
PNG定义了两种类型的数据块,关键数据块(critical chunk)和辅助数据块(ancillary chunks)。关键数据块定义了4个标准数据块,每个PNG文件都必须包含它们,PNG读写软件也都必须要支持这些数据块。
数据块结构
-
名称 字节数 说明 Length (长度)
4字节
指定数据块中数据域的长度,其长度不超过(231-1)字节
Chunk Type Code (数据块类型码)
4字节
数据块类型码由ASCII字母(A-Z和a-z)组成
Chunk Data (数据块数据)
可变长度
存储按照Chunk Type Code指定的数据
CRC (循环冗余检测)
4字节
存储用来检测是否有错误的循环冗余码
CRC(cyclic redundancy check)域中的值是对Chunk Type Code域和Chunk Data域中的数据进行计算得到的。
2.2 关键数据块
2.2.1 IHDR(文件头数据块)
包含PNG文件中图像数据的基本信息,并要作为第一个数据块出现在PNG数据流中,一个PNG数据流中只能有一个文件头数据块。
文件头数据块由13字节组成,格式如下表所示。
字段 |
字节数 |
说明 |
Width |
4 bytes |
图像宽度,以像素为单位 |