JPEG、PNG 和 WebP 压缩不是同一个问题

正确的压缩策略取决于图像格式以及必须保留的属性。JPEG 通常用一部分视觉保真度换取更小文件,PNG 往往可以在不改变像素的情况下无损优化,而 WebP 根据源文件和编码器可以包含有损或无损图像数据。

最近技术复核: 2026-09-19

关键结论

  • 更小的图像并不自动等同于原图。
  • 像素尺寸、Alpha 透明度、文件格式和元数据是不同属性,需要分别做出明确决定。
  • 重新编码即使保留宽度和高度,也经常会去掉原始元数据。
  • 经过验证的压缩器应在提供输出前解码或检查自己生成的文件。

JPEG:受控的有损重压缩

JPEG 面向照片类图像,通常采用有损压缩。使用较低质量重新编码可以在保持像素尺寸的同时节省字节,但会丢弃一部分图像信息。

反复 JPEG 重压缩会累积伪影,因此压缩器应使用有边界的质量策略,而不是无限降低质量。

PNG:无损像素与结构选择

PNG 支持无损图像数据和 Alpha 透明度。无损优化器可以重新组织扫描行或选择更高效的过滤方式,而不改变解码后的像素值。

不同 PNG 变体的处理复杂度不同。调色板、隔行扫描、高位深以及不常见的 chunk 都可能需要单独支持。

WebP:格式支持与编码器行为都很重要

WebP 支持多种编码模式,包括透明度。浏览器原生编码的元数据行为可能与源文件不同,也不意味着所有 WebP 功能都会被保留。

专用压缩器应定义受支持的输入变体,保留要求的尺寸和 Alpha 行为,并确认输出确实是 WebP。

为什么 ZAMAZY 把工具分开

ZAMAZY 为 JPEG、PNG 和 WebP 分别提供压缩工具,而不是使用一个通用按钮。每个工具都有自己的支持规则和验证检查。

JPEG 工具明确接受有损重压缩,PNG 路径专注无损像素保留,而 WebP 输出会在受支持范围内验证格式、尺寸和透明度。

示例与决策参考

照片、带小号文字的截图以及透明 Logo 的优先级并不相同。可以接受一定损失时,JPEG 适合照片;当解码像素和 Alpha 必须精确保留时,无损 PNG 更合适。WebP 支持多种模式,但 ZAMAZY WebP 压缩器使用受限的有损重编码流程,而不是格式允许的全部模式。

根据现有文件格式选择对应压缩器。这些专用工具不是格式转换器,也不是尺寸调整工具。检查输出中的文字边缘、渐变、颜色和透明边界。宽高不变并不能证明 RGB 像素完全不变。质量值是编码器设置,不是通用视觉评分,也不是可以在不同浏览器间直接比较的百分比。

哪些情况下不适合这种方法

保留 Alpha 并不能证明色彩配置、动画或所有元数据字段都被保留。已经高度压缩的输入可能无法得到更小且可接受的结果。如果要求像素完全一致、动画、印刷色彩流程或指定的新格式,不应仅因扩展名受支持就用有损压缩代替这些要求。

编辑性示例,不是 benchmark。补充内容复核日期:

来源与证据边界

这些来源用于解释格式和方法,并不认证 ZAMAZY。ZAMAZY 实际支持的事实与限制以对应工具页面为准。

第一方厂商研究:PNG 无损保留

状态:已验证。 ZAMAZY 使用未修改的 PNG 引擎处理三个固定、完全合成的 PNG 文件,然后再次解码每个结果并进行结构比较。

这是第一方厂商研究,不是独立认证。测试输入为了易于压缩而有意使用 zlib 压缩级别 0,因此不能代表典型压缩 benchmark。

PNG 证据流程图:合成 PNG 使用真实的 ZAMAZY PNG 引擎处理,再次解码,并比较 scanline、chunk 和 Alpha。
可复现研究的流程。图示仅包含合成测试数据。
三个合成 PNG 用例的观察结果
Fixture尺寸输入输出已验证的保留项
rgb-flat-v1256 × 6449,284 B252 BScanline 相同; 非 IDAT chunk 相同; 未产生更小输出时拒绝第二次处理
rgba-pattern-v164 × 328,292 B4,700 BScanline 相同; 非 IDAT chunk 相同; Alpha 相同; 未产生更小输出时拒绝第二次处理
gray-metadata-v164 × 322,199 B158 BScanline 相同; 非 IDAT chunk 相同; 未产生更小输出时拒绝第二次处理

负面用例

在已验证环境中,截断的 zlib 数据、无效 Adler-32 校验和以及 zlib 数据流后的额外数据都会被拒绝。

  • truncated-zlib: 已拒绝
  • invalid-adler32: 已拒绝
  • trailing-zlib-data: 已拒绝

方法与适用边界

研究比较了优化前后的解码 scanline、页面几何和所有非 IDAT chunk;RGBA 用例还明确比较了 Alpha。独立的控制解压使用 Node zlib,但它不是外部独立验证机构。

这些证据只适用于已记录的 fixture 和指定引擎版本。它不能证明所有 PNG 变体、浏览器网络行为、设备支持、典型压缩率,也不能证明任意用户文件都安全。

研究 png-preservation-v1 · 复核日期 · Node 22.22.3 / zlib 1.3.1-e00f703 / linux x64 ·引擎 commit a12415a3a19f

常见问题

PNG 一定比 JPEG 大吗?

不一定,取决于图像。照片通常更适合 JPEG,而平面图形、文字型图像和透明内容可能更适合 PNG。

尺寸不变是否意味着图像无损?

不是。宽度和高度可以完全相同,但 JPEG 或有损 WebP 在编码时仍会丢弃视觉信息。

为什么压缩后元数据会消失?

浏览器重编码通常会创建新的图像数据流,而不是复制原始容器元数据。EXIF、GPS 等信息如果必须保留,需要明确的支持。

Build v0.1.0-beta.6 · 17d46c81a737Sunday, 2026-09-27 · 05:12