PNG格式详解 — 无损压缩与透明背景
整理了 PNG 格式的诞生背景(GIF 专利问题)、从 1996 年 W3C 建议到 2025 年第三版(HDR·APNG·EXIF)的历史、无损压缩原理与数据块结构、透明度,以及用于照片时体积变大的原因。
PNG(Portable Network Graphics)诞生于 1990 年代中期,目的是避开 GIF 所用 LZW 压缩的专利问题,同时提供比 GIF 更好的功能。它在 1996 年成为 W3C 建议,之后又被标准化为 ISO/IEC 15948。2025 年 6 月,距第二版(2003 年)22 年之后的修订版 PNG 第三版 作为 W3C 建议发布,正式将动画 PNG(APNG)、HDR 色彩信息和 EXIF 数据块纳入标准。
压缩原理
PNG 是完全不改变像素值的 无损 格式。它先对每一行应用过滤器,把像素值变成“与左侧、上方像素的差值”这类容易预测的数值,再用与 zip 同类的 Deflate 算法压缩。同一种颜色大面积重复时,差值会连续为 0,因此能压缩得非常小;而像照片这样每个像素值都略有不同的图像,则几乎压缩不了。
如果把颜色减少到 256 色以下、以调色板方式(索引色)保存,可以大幅减小体积。但这一过程本身是减少颜色的有损操作,所以请记住:即使结果是 PNG,也已与原图不同。
文件签名与数据块结构
PNG 文件总是以 8 字节签名(十六进制 89 50 4E 47 0D 0A 1A 0A)开头。之后是称为 数据块(chunk) 的单元,每个数据块由长度、类型(4 个字符)、数据和 CRC 校验值组成。
| 数据块 | 作用 |
|---|---|
| IHDR | 宽高、位深、颜色类型 |
| PLTE | 调色板(索引色时) |
| tRNS | 调色板·单色图像的透明信息 |
| IDAT | 压缩后的像素数据(可拆分为多个) |
| eXIf | EXIF 元数据(第三版正式纳入) |
| cICP | HDR 等色彩空间信息(第三版新增) |
| acTL · fcTL · fdAT | APNG 动画控制与帧(第三版正式纳入) |
| IEND | 文件结束 |
它的设计是忽略不认识的辅助数据块,因此即使加入新功能,老旧程序也能打开文件。不支持 APNG 的看图软件只显示第一帧,也正是得益于这种设计。
透明度
PNG 可以为每个像素设置 0~255(16 位时为 0~65,535)级的 Alpha 通道,就连半透明的阴影和发丝边缘也能自然呈现。这就是它被用作保存抠图图片、Logo 和图标的标准格式的原因。
优点与局限
- 最适合文字、线条、图表:边缘保持清晰,体积也常常比 JPG 小。
- 反复保存也无损:适合作为编辑过程中的中间文件。
- 用于照片效率低:同一张照片的体积会是 JPG 的好几倍。
- APNG 支持:据 Can I use,Chrome 59、Firefox 3、Safari 8 起支持,不支持的程序只显示第一帧。
主要用途
屏幕截图、Logo 与图标、透明背景图片、图表与曲线图、编辑用原图。印刷店要求无损文件时也会使用。
转换为其他格式时
- PNG → JPG:透明部分需要用背景色填充。把截图转成 JPG 时文字周围可能会模糊,请把质量设高一些(将 PNG 转为 JPG)。
- PNG → WebP:转成无损 WebP 往往能在保留透明度的同时减小体积。Google 公布无损 WebP 平均比 PNG 小 26%。
- PNG → ICO:需要网站图标或 Windows 图标时,可以 将 PNG 转为 ICO。最好使用正方形的原图。
- 16 位 PNG:浏览器 Canvas 以每通道 8 位处理,因此用网页工具转换 16 位原图时会降为 8 位。