我研究过PNG结构以开发一些有关它的东西。我找到了一些有趣的东西。
关键 PNG块的名称(IHDR
,PLTE
,IDAT
,IEND
,PLTE
)都是大写的。 辅助 PNG块的名称中至少有一个小写字符(bKGD
,cHRM
,gAMA
,hIST
,{{1 }},iCCP
,iTXt
,pHYs
,sBIT
,sPLT
,sRGB
,sTER
,tEXt
,tIME
,tRNS
等。)
我很好奇。在标准化它们时是否有命名规则?
答案 0 :(得分:1)
根据Jongware,答案如下: https://www.w3.org/TR/PNG/#5Chunk-naming-conventions
5.4块命名约定
块类型的四位,属性位,即每个字节的位5(值32),用于传递块属性。该选择意味着人类可以根据与块类型的每个字节相对应的字母是大写(第5位是0)还是小写(第5位是1)来读取所分配的属性。但是,解码器应该通过数字测试指定的位来测试未知块类型的属性。测试字符是大写还是小写是低效的,如果使用特定于语言环境的大小写定义,甚至是不正确的。
属性位是块类型的固有部分,因此对于任何块类型都是固定的。因此,
CHNK
和cHNk
将是不相关的块类型,而不是具有不同属性的相同块。属性位的语义在表5.2 中定义。
表5.2 - 属性位的语义
辅助位:第一个字节
0(大写)=严重,1(小写)=辅助。
关键块是成功显示数据流内容所必需的,例如图像标题块(
IHDR
)。在遇到辅助位为0的未知块类型时,试图提取图像的解码器应向用户指示该图像包含它不能安全解释的信息。 辅助块不是严格必需的,以便有意义地显示数据流的内容,例如时间块(tIME
)。遇到辅助位为1的未知块类型的解码器可以安全地忽略该块并继续显示图像。专用位:第二个字节
0(大写)= public,1(小写)= private。
公共块是在本国际标准中定义的或在注册机构维护的PNG特殊目的公共块类型列表中注册的(见4.9扩展和注册)。应用程序还可以为自己的目的定义私有(未注册)块类型。私有块的名称具有小写的第二个字母,而公共块的名称将始终分配有大写的第二个字母。解码器不需要测试私有块属性位,因为它没有功能意义;确保公共和私有块名称不会发生冲突只是一种管理上的便利。见第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。