目录
一、PNG文件简介
中文名 | 便携式网络图形 | 类型 | 无损压缩的位图片形格式 |
英文名 | Portable Network Graphics(PNG) | 设计目的 | 试图替代GIF和TIFF文件格式 |
二、PNG文件结构
PNG图像格式文件由一个8字节的PNG文件署名域和按照特定结构组织的3个以上的数据块(chunk)组成。
PNG文件署名域 | PNG数据块 | PNG数据块 | ... | PNG数据块 |
1、PNG文件署名域
PNG文件署名域是用来标识一个文件是否是PNG格式的,共有8个固定字节:
十进制数 | 137 80 78 71 13 10 26 10 |
十六进制数 | 89 50 4E 47 0D 0A 1A 0A |
2、PNG数据块(Chunk)
PNG定义了两种类型的数据块:
- 关键数据块(critical chunk)——这是必需的数据块
- 辅助数据块(ancillary chunks)——这是可选的数据块
每个数据块由4个部分组成:
名称 | 字节数 | 说明 |
Length (长度) | 4 | 指定数据块中数据域的长度,其长度不超过(2^31-1)字节 |
Chunk Type Code (数据块类型码) | 4 | 数据块类型码,由ASC||字母(A~Z)(a~z)组成 |
Chunk Data (数据块数据) | 可变 | 存储按照Chunk Type Code指定的数据 |
CRC (循环冗余检测) | 4 | 存储用来检测是否有错误的循环冗余码 |
(1)关键数据块
关键数据块可分为四种类型:
①文件头数据块IHDR(header chunk)
它包含PNG文件存储的图像数据的基本信息,是PNG数据流中的第一个数据块中,一个PNG数据流有且仅有一个IHDR。IHDR数据块的数据块类型码(Chunk type code)为: 0x49 48 44 52(ASCII码“IHDR”),标识该块类型。
它的格式如下:
域的名称 | 字节数 | 说明 |
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 |
②调色板数据块PLTE(paltte chunk)
它含有与索引彩色图像(indexed-color image)相关的彩色变换数据,它仅与索引彩色图像有关,使得图像深度较小的图像,可以使用索引号来正确表示颜色,并且它要放在图像数据块IDAT之前。PLTE数据块是定义图像的调色板信息,它可以包含1~256个调色板信息。每一个调色板信息由3个字节组成:
颜色 | 字节 | 意义 |
Red | 1 | 0:黑 255:红 |
Green | 1 | 0:黑 255:绿 |
Blue | 1 | 0:黑 255:蓝 |
此外,PLTE块还必需满足以下限制条件:
- 调色板的长度应为3的倍数,即PLTE块最大字节数为256 × 3 = 768 B;
- 调色板信息的数量不能超过图像深度可以表示的范围;
- 对于Colour type 3的PNG图像(索引图像),PLTE块是必需的,此时调色板的颜色索引从0开始编号,然后是1,2……;对于Colour type为2和6的图像,PLTE块是可选的,此时调色板将提供一个1—256的建议颜色集,以便软件或屏幕不支持显示真彩色时量化真彩色图像;Colour type为0和4的图像中不能出现PLTE块。
③图像数据块IDAT(image data chunk)
它存储实际的数据,在数据流中可包含多个连续顺序的图像数据快IDAT。IDAT存放图像真正的数据信息。
④图像结束数据IEND(image trailer chunk)
它用来标记PNG文件或者数据流已经结束,并且必须要放在文件的尾部。
用固定的12个字节表示: 00 00 00 00 49 45 4E 44 AE 42 60 82
(2)辅助数据块
①透明信息数据块:tRNS(Transparency chunk)
②图像γ数据块:gAMA(Image gamma chunk)
③基色和白色度数据块:cHRM(Primary chromaticities chunk)
④标准RGB色彩空间数据块:sRGB(Standard RGB colour space chunk)
⑤文本信息数据块:tEXt(Textual data chunk)
⑥压缩文本数据块:zTXt (Compressed textual data chunk)
⑦背景颜色数据块:bKGD(Background colour chunk)
⑧物理像素尺寸数据块:pHYs(Physical pixel dimensions chunk)
⑨样本有效位数据块:sBIT(Significant bits chunk)
⑩图像直方图数据块:hIST(Palette histogram chunk)
⑩①图像最后修改时间数据块:tIME(Image last-modification time chunk)
三、PNG文件实例分析
用FlexHEX打开下图png:
①PNG文件标识
②文件头数据块IHDR
名称 | 数据 | 说明 |
Length | 00 00 00 0D | 数据域长度为13 |
Chunk Type Code | 49 48 44 52 | 标识IHDR |
width | 00 00 03 93 | 图像宽度为915 |
height | 00 00 02 20 | 图像高度为544 |
bit depth | 08 | 图像深度为8位 |
color type | 06 | 颜色类型为6,属于带α通道数据的真彩色图像 |
compression method | 00 | 无压缩 |
filter method | 00 | 滤波器方法为0 |
interlace method | 00 | 非隔行扫描 |
CRC | 18 C6 3D E6 | CRC检错 |
③图像结束数据IEND