5.2.2 PNG图像文件存储结构(1)
PNG文件存储结构的格式可以在http://www.w3.org/TR/REC-png.htm上找到定义。
BMP文件总体上由两部分组成,分别是PNG文件标志和数据块(chunks),如表5-8所示。其中数据块分为两类:关键数据块(critical chunk)和辅助数据块(ancillary chunks)。
表5-8 PNG文件的组成结构
PNG文件标志 |
数据块(chunks) |
1.PNG文件标志
PNG文件标志由8字节数据组成:89 50 4E 47 0D 0A 1A 0Ah,其中50 4E 47对应的ASCII值是"PNG"。
2.数据块(chunks)
紧跟在PNG文件标志后面的数据是数据块(chunks),数据块(chunks)分为两类:关键数据块(critical chunks)和辅助数据块(ancillary chunks)。
关键数据块(critical chunk)在PNG文件中是必须有的,而辅助数据块(ancillary chunks)是可选的。
关键数据块(critical chunks)由4部分组成:文件头数据块(IHDR)、调色板数据块(PLTE)、图像数据块(IDAT)和图像结束数据(IEND),其中调色板数据块(PLTE)根据图像的色深可选。
辅助数据块(ancillary chunks)一共有14个,这些辅助数据块包含了很多信息,辅助数据块不是必须包含的。
PNG文件的关键数据块和辅助数据块的组织顺序如表5-9和表5-10所示。
表5-9 PNG文件的关键数据块(critical chunks)组织顺序
数据块名称 | 允许多 个数据块 | 位 置 |
文件头数据块(IHDR) | 不允许 | 第一个数据块 |
调色板数据块(PLTE) | 不允许 | 第二个数据块,可选 |
图像数据块(IDAT) | 允许 | 如果有调色板数据块(PLTE),则是第三个数据块,如果没有调色板数据块(PLTE),则时第二个数据块。如果有多个图像数据块,则必须按图像数据连续存储 |
图像结束数据(IEND) | 不允许 | 最后一个数据块 |
表5-10 PNG文件的辅助数据块(ancillary chunks)组织顺序
数据块名称 | 允许多个 数据块 | 位 置 |
基色和白色点数据块(cHRM) | 不允许 | 在PLTE和IDAT之前 |
图像γ数据块(gAMA) | 不允许 | 在PLTE和IDAT之前 |
ICCP(iCCP) | 允许 | 在PLTE之后IDAT之前如果有iCCP,则无sRGB |
续表
数据块名称 | 允许多个 数据块 | 位 置 |
样本有效位数据块(sBIT) | 不允许 | 在PLTE和IDAT之前 |
标准RPG颜色(sRGB) | 不允许 | 在PLTE之后IDAT之前如 果有sRGB,则无iCCP |
背景颜色数据块(bKGD) | 不允许 | 在PLTE之后IDAT之前 |
图像直方图数据块(hIST) | 不允许 | 在PLTE之后IDAT之前 |
图像透明数据块(tRNS) | 不允许 | 在PLTE之后IDAT之前 |
物理像素尺寸数据块(pHYs) | 不允许 | 在IDAT之前 |
建议调色板(sPLT) | 允许 | 在IDAT之前 |
图像最后修改时间数据块(tIME) | 不允许 | 无限制 |
国际文本数据(iTXt) | 允许 | 无限制 |
文本信息数据块(tEXt) | 允许 | 无限制 |
压缩文本数据块(zTXt) | 允许 | 无限制 |