| PNG是20世纪90年代中期开始开发的图像文件存储格式,其目的是企图替代GIF和TIFF文件格式,同时增加一些GIF文件格式所不具备的特性。流式网络图形格式(Portable Network Graphic Format,PNG)名称来源于非官方的“PNG's Not GIF”,是一种位图文件(bitmap file)存储格式,读成“ping”。PNG用来存储灰度图像时,灰度图像的深度可多到16位,存储彩色图像时,彩色图像的深度可多到48位,并且还可存储多到16位的α通道数据。PNG使用从LZ77派生的无损数据压缩算法。
PNG文件格式保留GIF文件格式的下列特性:
PNG文件格式中要增加下列GIF文件格式所没有的特性:
文件结构 PNG图像格式文件(或者称为数据流)由一个8字节的PNG文件署名(PNG file signature)域和按照特定结构组织的3个以上的数据块(chunk)组成。 PNG定义了两种类型的数据块,一种是称为关键数据块(critical chunk),这是标准的数据块,另一种叫做辅助数据块(ancillary chunks),这是可选的数据块。关键数据块定义了4个标准数据块,每个PNG文件都必须包含它们,PNG读写软件也都必须要支持这些数据块。虽然PNG文件规范没有要求PNG编译码器对可选数据块进行编码和译码,但规范提倡支持可选数据块。 (1) PNG文件署名域 8字节的PNG文件署名域用来识别该文件是不是PNG文件。该域的值是:
(2) 数据块的结构 每个数据块都由表6-07所示的的4个域组成。 表6-07 PNG文件数据块的结构 名称 字节数 说明 Length(长度) 4字节 指定数据块中数据域的长度,其长度不超过(231-1)字节 Chunk Type Code(数据块类型码) 4字节 数据块类型码由ASCII字母(A-Z和a-z)组成 Chunk Data(数据块数据) 可变长度 存储按照Chunk Type Code指定的数据 CRC(循环冗余检测) 4字节 存储用来检测是否有错误的循环冗余码
在表6-07中,CRC(cyclic redundancy check)域中的值是对Chunk Type Code域和Chunk Data域中的数据进行计算得到的。CRC具体算法定义在ISO 3309和ITU-T V.42中,其值按下面的CRC码生成多项式进行计算: x32+x26+x23+x22+x16+x12+x11+x10+x8+x7+x5+x4+x2+x+1 数据块结构 1. 关键数据块 关键数据块中的4个标准数据块是: (1) 文件头数据块IHDR(header chunk):它包含有PNG文件中存储的图像数据的基本信息,并要作为第一个数据块出现在PNG数据流中,而且一个PNG数据流中只能有一个文件头数据块。 文件头数据块由13字节组成,它的格式如表6-08所示。 表6-08 PNG文件头键数据块的结构 域的名称 字节数 说明 Width 4 bytes 图像宽度,以像素为单位 Height 4 bytes 图像高度,以像素为单位 Bit depth 1 byte 图像深度:索引彩色图像:1,2,4或8 灰度图像:1,2,4,8或16 真彩色图像:8或16 ColorType 1 byte 颜色类型: 0:灰度图像, 1,2,4,8或16 2:真彩色图像,8或16 3:索引彩色图像,1,2,4或8 4:带α通道数据的灰度图像,8或16 0:非隔行扫描 1: Adam7(由Adam M. Costello开发的7
(2) 调色板数据块PLTE(palette chunk):它包含有与索引彩色图像((indexed-color image))相关的彩色变换数据,它仅与索引彩色图像有关,而且要放在图像数据块(image data chunk)之前。真彩色的PNG数据流也可以有调色板数据块,目的是便于非真彩色显示程序用它来量化图像数据,从而显示该图像。调色板数据块结构如表6-09所示。 表6-09 调色板数据块结构 域的名称 字节数 说明 Red 1 byte 0 = 黑,255 = 红 Green ">0 = 黑,255 = 绿 Blue 1 byte 0 = 黑,255 = 蓝
调色板实际是一个彩色索引查找表,它的表项数目可以是1~256中的一个数,每个表项有3字节,因此调色板数据块所包含的最大字节数为768。 (3) 图像数据块IDAT(image data chunk):它存储实际的数据,在数据流中可包含多个连续顺序的图像数据块。 (4) 图像结束数据IEND(image trailer chunk):它用来标记PNG文件或者数据流已经结束,并且必须要放在文件的尾部。 除了表示数据块开始的IHDR必须放在最前面, 表示PNG文件结束的IEND数据块放在最后面之外,其他数据块的存放顺序没有限制。 2. 辅助数据块 PNG文件格式规范制定的10个辅助数据块是: (1) 背景颜色数据块bKGD(background color)。 (2) 基色和白色度数据块cHRM(primary chromaticities and white point)。所谓白色度是指当R=G=B=最大值时在显示器上产生的白色度。 (3) 图像γ数据块gAMA(image gamma)。 (4) 图像直方图数据块hIST(image histogram)。 (5) 物理像素尺寸数据块pHYs(physical pixel dimensions)。 (6) 样本有效位数据块sBIT(significant bits)。 (7) 文本信息数据块tEXt(textual data)。 (8) 图像最后修改时间数据块tIME (image last-modification time)。 (9) 图像透明数据块tRNS (transparency)。 (10) 压缩文本数据块zTXt (compressed textual data)。 3. 数据块摘要 关键数据块、辅助数据块和专用公共数据块(special-purpose public chunks)综合在表6-10中。 表6-10 PNG文件格式中的数据块 数据块符号 数据块名称 多数据块 可选否 位置限制 IHDR 文件头数据块否 否 第一块 cHRM 基色和白色点数据块否 是 在PLTE和IDAT之前 gAMA 图像γ数据块否 是 在PLTE和IDAT之前 sBIT 样本有效位数据块否 是 在PLTE和IDAT之前 PLTE 调色板数据块否 是 在IDAT之前 bKGD 背景颜色数据块否 是 在PLTE之后IDAT之前 hIST 图像直方图数据块否 是 在PLTE之后IDAT之前 tRNS 图像透明数据块否 是 在PLTE之后IDAT之前 oFFs (专用公共数据块)否 是 在IDAT之前 pHYs 物理像素尺寸数据块否 是 在IDAT之前 sCAL (专用公共数据块)否 是 在IDAT之前 IDAT 图像数据块是 否 与其他IDAT连续 tIME 图像最后修改时间数据块否 是 无限制 tEXt 文本信息数据块是 是 无限制 zTXt 压缩文本数据块是 是 无限制 fRAc (专用公共数据块)是 是 无限制 gIFg (专用公共数据块)是 是 无限制 gIFt (专用公共数据块)是 是 无限制 gIFx (专用公共数据块)是 是 无限制 IEND 图像结束数据否 否 最后一个数据块
tEXt和zTXt数据块中的标准关键字: |
严禁发表危害国家安全、损害国家利益、破坏民族团结、破坏国家宗教政策、破坏社会稳定、侮辱、诽谤、教唆、淫秽等内容的评论。
用户需对自己在使用本站服务过程中的行为承担法律责任(直接或间接导致的)。
本站管理员有权保留或删除评论内容。
评论内容只代表网友个人观点,与本网站立场无关。