png图像格式规范 第十一章数据块的规范 11.1-11.2

第十一章 数据块的规范

 

11.1 介绍
PNG数据流由一个PNG的签名加一系列的数据块组成。每个数据块有一个数据块类型
指定它的功能。这一章中定义了在这个国际标准中标准化的PNG的数据块的类型。
PNG的数据流的结构在第五章中已经定义了。它也定义了这些数据块可能出现的顺序。
对于编码器的细节见12.11,对于解码器的细节见13.5。

 

11.2  关键性数据块
      11.2.1 总述
关键性的数据块是那些为了成功地从一个PNG的数据流解码成一个PNG图像,必须
要有的数据块。扩展的数据块可能被定义为关键性的数据块(见第十四章)尽管这
种实践不被推荐。

 

一个有效的PNG数据流应该开始于一个PNG的签名,紧接着是一个图像头的数据块,
然后是一个或者是多个的数据的数据块,应该以图像尾的数据块结尾。在一个PNG的
数据流中仅允许有一个图像头数据块和一个图像尾数据块。
      11.2.2  IHDR图像头
四个字节的数据块类型的域,包括了十进制的数据
73 72 68 82

 

IHDR图像头数据块应该是在PNG数据流中的第一个数据块。它包括了:
——————————————
宽度                4个字节
长度                4个字节
位深度             1个字节
颜色类型          1个字节
压缩方法          1个字节
过滤方法          1个字节
交织方法          1个字节
——————————————

 

宽度和长度在像素上给出了图像的维度。它们是PNG的四个字节长的无符号的整数。
0是一个有效的值 。

 

位深度是一个字节的整数,它给出了一个采样的比特的数量或者是一个调色板索引
的比特的数量。有效的值是1,2,4,8,16。尽管不是所有的值被所有的类型所允许。
见6.1颜色类型和值

 

颜色类型是一个字节的整数,它定义了PNG的图像的类型。有效的值是0,2,3,4,6。

 

对于每个颜色类型的位深度的限制的强调是为了简化实现,禁止不好压缩的组合。
允许的组合被定义在表格11.1中。

 

表格11.1  颜色类型与位深度的允许的组合
————————————————————————————————————————————
PNG图像类型        颜色类型     允许的位深度                  解释
灰度级                         0        1,2,4,8,16    每个像素是一个灰色采样
真彩色                         2        8,16                   每个像素是一个RGB的三种采样
索引颜色                      3        1,2,4,8          每个像素是一个调色板索引;应该有PLTE数据块
灰度带阿尔法               4        8,16                   每个像素是一个灰色采样加上一个阿尔法采样
真彩色带阿尔法            6        8,16                  每个像素是一个RGB的三种采样加上阿尔法采样
————————————————————————————————————————————

 

采样深度与位深度相同除了索引颜色的PNG图像的情况(颜色类型为3),它的采样深度总是8位。

 

压缩方法是一个字节的整数,显示了压缩图像数据时使用的方法。在这个国际标准中只定义了方法0
所有顺序PNG的图像的格式应该以这种方法进行压缩。

 

过滤方法是一个字节的整数,显示了在压缩之前对图像数据应用的预处理的方法。在这个国际标准中
只定义了方法0。见第九章,显示过滤的细节。

 

交织的方法是一个字节的整数,它显示了图像数据的传输的顺序。在这个国际标准中,定义了两个值
0(没有交织)和1(Adam7的交织)见第八章显示交织的细节。

 

      11.2.3 PLTE调色板
四个字节的数据块类型的域,包括了十进制的数据
80 76 84 69

 

PLTE数据块包括了从1到256个调色板入口,每个入口由三个字节的序列组成:
红色一个字节,绿色一个字节,蓝色一个字节。

 

入口的数量由数据块的长度决定。数据块的长度不能整除3是一个错误。

 

对于颜色类型是3时,这个数据块应该有,对于颜色类型是2和6时,这个数据块
可能有。对于颜色类型是0和4时,这个数据块不应该有。如果有的话,仅能有一个。

 

对于颜色类型是3时,这个数据块是必须的。在调色板的第一个入口被像素值为0的引用,
第二个入口被像素值为1的引用,等等。调色板的入口的数量不应该超过图像的位深度
(例如2的4次幂等于16,对于一个位深度为4的情况)能表示的范围。比位深度能
表示的范围有更少的入口数量是可以的。在这种情况下,在图像数据中发现了任何
超过范围的像素值 是一个错误。

 

对于颜色类型是2和6的时候,这个调色板数据块是可选项。如果它存在,它提供了
一个颜色的建议的集合。如果它不能被直接地显示出来,那么真彩色的图像能被量化。
然而,建议的是对于这种情况,使用的是sPLT数据块,而不是PLTE数据块。
在sPLT数据块和PLTE数据块都没有时,并且图像不能被直接显示,那么量化的工作不得不由
显示系统来做。然而,对于颜色的选择由PNG的编码器来一次做成,常常是更好的方法。

 

注意的是调色板使用的是每个采样为8位,而无关于图像的位深度。特别是当它是一个16位
的真彩色的图像的建议的量化时,调色板是一个8位的深度。

 

没有要求调色板的所有的入口都被图像所使用,也没有要求它们都是不同的。

 


      11.2.4  IDAT图像数据
四个字节的数据块类型的域,包括了十进制的数据
73  68  65 84

 

 IDAT图像数据块包括了实际的图像数据,它是压缩算法的输出的流。见第九章过滤和第十章压缩

 

这可能有多个图像数据的数据块;如果有,它们应该是连续地没有夹杂其它的数据块。压缩过的数据流
是所有的图像数据的数据块的内容的联合体。

 

      11.2.5  IEND图像尾数据块
四个字节的数据块类型的域,包括了十进制的数据
73 69 78 68

这个图像尾的数据块标识着PNG的数据流的结尾。这个块的数据域是空的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值