【问题标题】:Why were PNG chunks named like that?为什么 PNG 块要这样命名?
【发布时间】:2016-05-16 13:49:03
【问题描述】:

我研究了 PNG 结构来开发一些关于它的东西。我发现了一些有趣的东西。

critical PNG 块的名称(IHDRPLTEIDATIENDPLTE)都是大写的。 ancillary PNG 块的名称中至少有一个小写字符(bKGD, cHRM, gAMA, hIST, iCCP, iTXt, pHYssBITsPLTsRGBsTERtEXttIMEtRNSzTXt等)。

我很好奇。他们标准化时有命名规则吗?

【问题讨论】:

标签: png


【解决方案1】:

根据Jongware,答案是这样的: https://www.w3.org/TR/PNG/#5Chunk-naming-conventions

5.4 块命名约定

chunk类型的4个bit,property bits,即每个字节的bit 5(值32),用于传达chunk的属性。这种选择意味着人类可以根据块类型的每个字节对应的字母是大写(第 5 位为 0)还是小写(第 5 位为 1)来读取分配的属性。然而,解码器应该通过数值测试指定位来测试未知块类型的属性;测试一个字符是大写还是小写效率低下,如果使用特定于语言环境的大小写定义,甚至是不正确的。

属性位是块类型的固有部分,因此对于任何块类型都是固定的。因此,CHNKcHNk 将是不相关的块类型,而不是具有不同属性的同一个块。

属性位的语义在表5.2中定义。

表 5.2 - 属性位的语义

辅助位:第一个字节

0(大写)= 关键,1(小写)= 辅助。

关键块是成功显示数据流内容所必需的,例如图像头块(IHDR)。尝试提取图像的解码器在遇到辅助位为 0 的未知块类型时,应向用户指示图像包含无法安全解释的信息。 为了有意义地显示数据流的内容,辅助块并不是绝对必要的,例如时间块(tIME)。遇到辅助位为 1 的未知块类型的解码器可以安全地忽略该块并继续显示图像。

私有位:第二个字节

0(大写)= 公开,1(小写)= 私有。

公共块是在本国际标准中定义的或在注册机构维护的 PNG 专用公共块类型列表中注册的块(参见 4.9 扩展和注册)。应用程序还可以为自己的目的定义私有(未注册的)块类型。私有块的名称有一个小写的第二个字母,而公共块的名称将始终使用大写的第二个字母。解码器不需要测试 private-chunk 属性位,因为它没有功能意义;确保公共和私有块名称不会冲突只是一种管理便利。参见第 14 条:Editors and extensions 和 12.10.2:Use of private chunks

保留位:第三个字节

在此版本的 PNG 中为 0(大写)。如果保留位为 1,则数据流不符合此版本的 PNG。

块名的第三个字母大小写的意义是为将来可能的扩展保留的。在本国际标准中,所有的块名称都应具有大写的第三个字母。

安全复制位:第四个字节

0(大写)= 复制不安全,1(小写)= 复制安全。

纯解码器不感兴趣这个属性位,但 PNG 编辑器需要它。该位定义了对正在修改的数据流中无法识别的块的正确处理。 PNG 编辑器的规则在 14.2 中进一步讨论:Behaviour of PNG editors

【讨论】:

  • @Dmitry 谢谢你的建议。我刚刚包含了该部分。
猜你喜欢
  • 2010-10-27
  • 2021-06-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多