PNG 文件结构说明
如图所示,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 |
