PNG 文件结构说明
- PNG 文件头
- PNG 数据块:
- 标准数据块
- 辅助数据块
数据块符号 |
数据块名称 |
多数据块 |
是否可选 |
可获取的参数 |
---|---|---|---|---|
IHDR |
文件头数据块 |
否 |
否 |
PNG 图片的宽、高、位深、颜色类型、Interlace Method 等。关于 IHDR 的详细说明,可查看 IHDR 对 PNG 标注的支持说明。 |
PLTE |
调色板数据块 |
否 |
否 |
- |
tRNS |
图像透明数据块 |
否 |
否 |
- |
IDAT |
图像数据块 |
多数据块 |
是 |
Zlib 格式的压缩码流数据。 注: Zlib 压缩之前,可以采用 Filter
算法对原始数据进行处理,有助于提升压缩率。关于具体流程说明,可查看 Filter 算法说明。 |
IEND |
图像结束数据块 |
否 |
否 |
- |
IHDR 对 PNG 标注的支持说明
IHDR 中可以获取到 PNG 图片的宽、高、位深、颜色类型和 Interlace Method 等参数。本模块对 PNG 标准的支持情况如下:
域名 |
标准定义 |
本模块是否支持 |
---|---|---|
位深 |
索引彩色图像:1,2,4,8 |
是 |
灰度图像:1,2,4,8 或 16 |
否 |
|
真彩色图像:8 或者 16 |
支持 8 bits,不支持 16 bits |
|
颜色格式 |
0:灰度图像,1,2,4,8 或 16 |
否 |
2:真彩色图像 |
是 |
|
3:索引彩色图像,1,2,4 或 8 |
是 |
|
4:带α通道数据的灰度图像,8 或 16 |
否 |
|
6:带α通道数据的真彩色图像,8 或 16 |
支持 8 bits,不支持 16 bits |
|
扫描方式 |
0:非隔行扫描 |
是 |
1:Adam7 |
否 |
Filter 算法说明
PNG 图片的码流数据都在数据块 IDAT 中,IDAT 中是以 zlib 格式的压缩码流,在 zlib 压缩之前,可以采用 Filter 算法对原始数据进行处理,有助于提升压缩率。PNG 图像如下如所示,X 表示当前要进行 Filter 的像素,A 为当前像素左边像素,B 为当前像素上边像素,C 为当前像素左上边像素,则对 Fiter 的说明如下所示:
Filter 类型 |
函数 |
Filter 方式 |
---|---|---|
0 |
无 |
保留原始数据 |
1 |
减 |
减去 A |
2 |
上 |
减去 B |
3 |
平均 |
根据 A 和 B 取平均,并向下取整 |
4 |
Paeth |
使用最接近与 A + B - C 的 A、B 或者 C |