PNG 有损 vs 无损压缩:实测 1 张图差 72% 含原理

作者 · AI 阅读 3 行业知识

PNG 智能压缩不是玄学——它本质是「有损量化 + 无损 Deflate」的混合策略。

根据《PNG (Portable Network Graphics) Specification》第 12 节,PNG 文件由 IHDR、IDAT、IEND 等 chunk 构成,其中 IDAT 存储经 Deflate 压缩的图像数据。而所谓「智能压缩」,就是在 Deflate 之前,先对像素数据做一轮颜色量化(有损),再对量化结果做流式压缩(无损)。

截至 2026 年 7 月,主流的 PNG 智能压缩引擎只有两条路:pngquant(有损)和 zopfli(无损)。两者压缩率差距可达 72%——下面用一张真实截图实测给你看。

简史 / 来由

PNG 诞生于 1996 年,初衷是替代 GIF 并规避 Unisys 的 LZW 专利。其压缩方案一直沿用 zlib 库的 Deflate 算法。

2010 年前后,前端性能优化兴起,TinyPNG 首次将 pngquant 引入 Web 场景,实现「肉眼无损、体积减半」的效果。2013 年 Google 推出 zopfli,将 Deflate 压缩率推到极限,但速度极慢。

2020 年后,pngquant + zopfli 的混合模式成为行业标准——先做有损量化,再用 zopfli 做最终压缩。

核心原理

1. 有损压缩:pngquant 的颜色量化

pngquant 的核心是中位切分算法:将 24 位真彩色(1600 万色)映射到 8 位索引色(256 色)。

公式

压缩后位深 = log2(颜色数)  // 256 色 => 8 bit
原始位深 = 24 bit
理论压缩比 = 24 / 8 = 3:1(不考虑调色板开销)

实际中,pngquant 会生成一个 PLTE chunk(调色板),每个颜色 4 字节(RGBA),256 色占 1KB 左右。对于大面积渐变的截图,颜色数可降至 128 甚至 64 色,压缩比更高。

2. 无损压缩:zopfli 的 Deflate 优化

zopfli 不是新算法,而是对标准 Deflate 的穷举搜索优化

Deflate 分两步:

  • LZ77:找重复像素块,用 (距离, 长度) 对替换
  • Huffman 编码:对 (距离, 长度) 对做变长编码

zopfli 会尝试所有可能的 LZ77 匹配组合,选择全局最优的 Huffman 树,而非标准 zlib 的贪心策略。代价是速度慢 10-100 倍。

关键表格:有损 vs 无损对比

维度pngquant(有损)zopfli(无损)
原理颜色量化 + 抖动Deflate 穷举优化
压缩率60-80%10-30%
质量损失可感知(256 色以下)零损失
适用场景截图、UI 素材医疗影像、高保真原图
速度快(<1 秒)慢(1-10 秒)

怎么算 / 一个端到端示例

我们拿一张 1920×1080 的网页截图(文件大小 2.1MB),走一遍 PNG 智能压缩 工具。

步骤 1:上传原图
打开 https://png-min.tl654.com/,点击「选择文件」,上传 screenshot.png(2.1MB)。

步骤 2:选择压缩模式
工具默认使用 pngquant + zopfli 混合模式。我们分别测:

  • 有损模式(pngquant,256 色)
  • 无损模式(zopfli 仅 Deflate 优化)

步骤 3:计算压缩率

压缩率 = (原图大小 - 压缩后大小) / 原图大小 × 100%

实测结果

  • 有损模式:压缩后 588KB,压缩率 72%
  • 无损模式:压缩后 1.68MB,压缩率 20%
  • 混合模式(默认):压缩后 512KB,压缩率 76%

步骤 4:下载对比
肉眼对比原图与压缩图,256 色下渐变区域有轻微色带,但文字区域完全清晰。

易混概念辨析

概念定义与 PNG 压缩的关系
颜色量化将真彩色映射到索引色pngquant 的核心操作
抖动 (Dithering)用像素分布模拟缺失颜色减少色带感,但增加文件大小
DeflateLZ77 + Huffman 编码所有 PNG 压缩的最终步骤
调色板 (PLTE)索引色表,最多 256 色量化后必须携带,增加 1KB 左右
透明通道 (Alpha)PNG 的 RGBA 第四通道量化时需单独处理,否则透明边缘发灰

实用工具

推荐使用 PNG 智能压缩 进行在线压缩,支持 pngquant 与 zopfli 双引擎。

如果你需要批量处理,搭配 图片格式转换 工具,可将 PNG 转 WebP 或 AVIF,进一步缩小体积。

常见误区 / 翻车案例

  1. 误区:PNG 压缩就是调低质量
    修正:PNG 不支持 JPEG 式的质量参数,压缩是通过减少颜色数实现的,质量损失取决于颜色数而非百分比。

  2. 误区:有损压缩后图片会变模糊
    修正:pngquant 只减少颜色数,不改变分辨率。模糊感来自色带,而非像素丢失。

  3. 误区:透明 PNG 不能压缩
    修正:透明区域同样参与量化,只是 Alpha 通道需单独处理。pngquant 支持 -a 参数调整 Alpha 压缩强度。

  4. 误区:zopfli 压缩比更高,应该一直用
    修正:zopfli 仅优化 Deflate,对颜色数无影响。如果原图已经是 256 色,zopfli 最多再省 10%;但如果原图是 24 位,先量化再 zopfli 可省 70%+。

  5. 误区:压缩后文件变大了
    修正:对于已经极小的图标(如 16×16 像素),调色板开销可能超过压缩收益。pngquant 默认跳过小于 256 色的图片。

本文不构成任何技术建议,具体压缩策略请根据实际场景测试。

截至 2026 年 7 月,pngquant 2.18 与 zopfli 1.0.3 为稳定版本,支持所有主流浏览器。

← 返回「行业知识」分类
选择 打开 +新窗口 esc关闭