一、PNG文件的组成
Png文件构成方式如下:
其中:
PNG文件署名固定8字节为89 50 4E 47 0D 0A 1A 0A
每个数据块由四部分构成:
名称 | 字节数 | 说明 |
---|---|---|
Length(长度) | 4Bytes | 指定数据块中数据长度,不超过(231-1)字节 |
Chunk Type Code(类型码) | 4Bytes | 由ASCII字母(A-Z和a-z)构成 |
Chunk Data(实际数据) | 可变 | 存放指定类型数据 |
CRC(循环冗余检测) | 4Bytes | 用于错误校验 |
PNG定义了两种类型的数据块,一种是称为重要数据块(critical chunk),这是标准的数据块,还有一种叫做辅助数据块(ancillary chunks),这是可选的数据块。
重要数据块又分为:
- 文件头数据块IHDR(header chunk)
包含PNG文件里存储的图像数据的基本信息,作为第一个数据块出现在PNG数据流中,一个PNG数据流有且仅有一个文件头数据块。
名称 | 字节数 | 说明 |
---|---|---|
Width | 4Bytes | 图像宽度 |
Height | 4Bytes | 图像高度 |
Bit depth | 1Bytes | 图像深度:索引彩色图像:1,2,4或8灰度图像:1,2,4,8或16 |
真彩色图像:8或16 | ||
ColorType | 1Bytes | 颜色类型:0:灰度图像, 1,2,4,8或16 ; 2:真彩色图像,8或16 ; 3:索引彩色图像,1,2,4或8 ; 4:带α通道数据的灰度图像,8或16 ; 6:带α通道数据的真彩色图像,8或16 |
Compression method | 1Bytes | 压缩方法 |
Filter method | 1Bytes | 滤波器方法 |
Interlace method | 1Bytes | 隔行扫描方法:0:非隔行扫描 ; 1: Adam7(由Adam M. Costello开发的7遍隔行扫描方法) |
- 调色板数据块PLTE(palette chunk)
它包含有与索引彩色图像(indexed-color image)相关的彩色变换数据,它仅与索引彩色图像有关,而且要放在图像数据块(image data chunk)之前。PLTE能够包括1~256个调色板信息,每个调色板信息由3个字节组成:
颜色 | 字节 | 说明 |
---|---|---|
Red | 1Bytes | 红色,0-255 |
Green | 1Bytes | 绿色,0-255 |
Blue | 1Bytes | 蓝色,0-255 |
- 图像数据块IDAT(image data chunk)
存储实际的数据,数据流中往往包含多个IDAT块。是根据压缩方法压缩后的数据。
- 图像结束数据IEND(image trailer chunk)
Chunk Data(实际数据)为空,并且整个数据块内容固定为:
00 00 00 00 49 45 4E 44 AE 42 60 82
IEND数据块的长度总是0(00 00 00 00),数据标识为IEND(49 45 4E 44),因此,CRC码也总是AE 42 60 82。
可选数据块分为以下类型:
- 背景颜色数据块bkGD(background color).
- 基色和白色度数据块cHRM(primary chromaticities and white point). 所谓白色度是指当R=G=B=最大值时在显示器上产生的白色度。
- 图像透明数据块tRNS(transparency).
- 物理像素尺寸数据块pHYs(physical pixel dimensions).
二、关于PNG文件的设计思想和理解
-
该容器包含哪些必要元数据信息?
答:为正确显示一幅图片,我们需要知道它的长宽,色彩和图像深度等基本信息。为了节省储存空间,往往会对图像数据进行压缩。因此,还需要在元数据中包含图像的压缩信息。 -
为什么图像文件中需要加入可选的调色板,PNG是否支持调色板?
答:对于某些对色彩要求不高的应用,往往只需要几十上百种色彩,若此时再用24bits真彩色,则或造成数据的冗余,文件体积过大。因此,采用调色板-索引的方式可以减少数据量。PNG文件支持调色板,但调色板最多仅256个信息,少于BMP文件。 -
PNG文件哪些设计使得文件便于编辑与管理?
答:①文件分块,每个块携带与其功能相对应的信息,这使得在进行编辑时可根据编辑需要直接访问编辑相应数据;②每个块用自己的类型码进行标识,便于定位相应元数据信息,且Chunk的元数据中包含数据长度信息,可定位至块中的数据信息和下一个块的起始,便于快速访问块中数据。 -
PNG文件哪些设计使得文件便于交换和存储?
答:①文件支持压缩算法,可有效减少文件体积;②文件数据块可选,这使得一个PNG文件可以不携带不必要的数据块从而减小体积;③支持循环冗余检测,并以块为单位,这使得在传输时可及时发现文件的错误并大致定位出错的位置。 -
PNG文件是否具有扩展性?
答:PNG文件的扩展性体现在可选择的数据块上。根据不同的应用需求,文件可携带背景色、透明度等信息的数据块,以便适用于不同应用场景。