2、PNG文件结构分析

目录

一、PNG文件简介 

二、PNG文件结构

1、PNG文件署名域

2、PNG数据块(Chunk)

(1)关键数据块

(2)辅助数据块

三、PNG文件实例分析


一、PNG文件简介 

中文名 便携式网络图形 类型 无损压缩的位图片形格式
英文名 Portable Network Graphics(PNG) 设计目的 试图替代GIFTIFF文件格式

二、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

猜你喜欢

转载自blog.csdn.net/m0_51333023/article/details/123458868