PNG 文件结构说明
7 Jun 2024
Read time: 2 minute(s)
如图所示,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 |