同样是「压缩 WebP」,不同的人想做的事完全不一样:
有人是想把一堆 JPG、PNG 转成 WebP;有人是手里已经有 WebP,想再压小一点;还有人要处理的是会动的 WebP。
工具没有绝对的好坏,只有适不适合。这篇文章按场景来推荐,每个场景只给最顺手的一两个。
开始之前:两分钟了解 WebP
WebP 其实有三种形态:
- 有损 WebP:原理类似 JPEG,按质量参数丢弃细节,体积小,适合照片、Banner。
- 无损 WebP:原理类似 PNG,像素完全不变,适合截图、UI 素材。
- 动态 WebP:多帧动画,可以有损也可以无损,常见于从 GIF 转换来的表情包和演示动图。
不确定手里是哪种,用 Google 官方的 webpinfo 看一眼:
bash
brew install webp
webpinfo image.webp
输出里有 VP8 是有损,VP8L 是无损,有 ANIM / ANMF 就是动图。
还有一件事值得先知道:有损 WebP 用更高的质量参数重新编码,体积会变大,画质却不会变好——丢掉的细节回不来。所以对已经是 WebP 的图,好的压缩工具应该能判断「压不动就不压」。
场景一:把 JPG / PNG 批量转成 WebP
这是大多数人第一次接触 WebP 时要做的事。
图形界面选 XnConvert。 免费、跨平台,可以一次拖进一批图,设置 WebP 的质量或无损模式,顺带改尺寸、改文件名。转格式这件事,它是最省心的。
写进构建流程选 cwebp 或 sharp。 网站项目里,与其手动转,不如在打包或上传 CDN 时自动处理:
bash
# cwebp:质量 75,最慢最省的编码方式,保留颜色配置文件
cwebp -q 75 -m 6 -metadata icc input.jpg -o output.webp
js
// sharp(Node.js)
await sharp('input.jpg').webp({ quality: 75, effort: 6 }).toFile('output.webp')
拿不准参数?先用 Squoosh 试。 Google 的在线工具,一次处理一张,但可以左右分屏、实时拖动质量看效果。摸清楚「这类图用多少质量合适」,再把参数填进上面的批量工具。
场景二:已经是 WebP,想再压小一点
网站早就换成了 WebP,Lighthouse 还是提示「图片可以进一步压缩」;或者素材目录里一堆 WebP,占着空间。这时候需要的不是转格式,而是在原地把现有文件变小。
Mac 用户:ImgZilla
ImgZilla 是我们做的 macOS 图片压缩工具,这个场景正是它最擅长的:
- 原地压缩,路径不变。
banner.webp压完还是banner.webp,网页、代码、文档里的引用一行都不用改。 - 整个文件夹拖进去。递归扫描所有子目录,自动跳过隐藏文件和
node_modules;WebP 和 JPG、PNG、GIF、AVIF、HEIC、SVG 混在一起也能一次处理完。 - 不用调参数。使用 Google libwebp 编码,质量 75、编码努力程度 4,与 Squoosh 默认参数一致;透明通道以最高质量保留,透明背景不会出现毛边。
- 压不动的不硬压。重新编码后如果没有变小(压缩率不足 0.4%),就标为「已最小」并保留原文件,不会把更大的文件交给你,也不扣免费额度。
- 可以反悔。原图默认移入废纸篓,觉得哪张不满意,右键「放回原处」即可。
- 全程本地运行,素材不上传任何服务器。
其他平台:Caesium 或 TinyPNG
- Caesium Image Compressor:开源免费,Windows、macOS、Linux 都能用,支持 WebP 批量压缩,可以设置质量和是否保留元数据。
- TinyPNG:网页工具,同样支持 WebP。拖进去就行,但免费版有张数和大小限制,图片要上传到对方服务器。
场景三:动态 WebP
动图分两种需求:
把 GIF 转成动态 WebP:用 Google 官方的 gif2webp(与 cwebp 同在 libwebp 工具包里,Mac 上 brew install webp 即可)。同样的动画,动态 WebP 通常比 GIF 小很多。
bash
gif2webp -q 75 -m 6 input.gif -o output.webp
已有的动态 WebP 想再压小:很多工具遇到动图会直接报错,或者只保留第一帧。ImgZilla 支持动态 WebP 的再压缩——逐帧重新编码,帧数、每帧时长、循环次数、画布尺寸都保持不变,动画还是原来的动画,只是文件更小。和静态图一样,压不动的会标为「已最小」并保留原文件。
场景四:必须像素不变
UI 切图要和设计稿严格一致、截图要做像素级比对、素材之后还要继续编辑——这些情况需要无损。
用 cwebp:
bash
# 纯无损
cwebp -lossless -z 9 input.png -o output.webp
# 近无损:像素有极微小变化,但比纯无损小不少,适合截图和 UI
cwebp -near_lossless 60 input.png -o output.webp
注意:ImgZilla 对 WebP 统一使用有损编码,包括原本是无损的 WebP。体积通常会明显变小,但像素不再逐一相同。另外它会去掉 WebP 里的元数据(包括颜色配置文件),普通 sRGB 图片不受影响,带 Display P3 等广色域配置的图在色彩管理软件里颜色可能略有差异。对像素和颜色有严格要求的图,请用 cwebp,或者压缩前先挑出来。
一张表总结
| 你要做的事 | 推荐 | 备选 |
|---|---|---|
| 把 JPG / PNG 批量转成 WebP | XnConvert | cwebp、sharp(构建流程) |
| 试参数、单张处理 | Squoosh | — |
| 已有 WebP 原地再压小(Mac) | ImgZilla | Caesium |
| 已有 WebP 再压小(Windows / Linux) | Caesium | TinyPNG |
| GIF 转动态 WebP | gif2webp | — |
| 已有动态 WebP 再压小 | ImgZilla | 自行用 libwebp 写脚本 |
| 必须像素不变 | cwebp -lossless / -near_lossless |
— |
下载链接
| 工具 | 平台 | 价格 | 下载 |
|---|---|---|---|
| ImgZilla | macOS 12.3+ | 免费版每天 10 张 | Mac App Store |
| XnConvert | Windows / macOS / Linux | 个人免费 | xnview.com |
| Caesium Image Compressor | Windows / macOS / Linux | 免费开源 | saerasoft.com |
| cwebp / gif2webp / webpinfo | 命令行 | 免费开源 | Google 官方下载,Mac:brew install webp |
| sharp | Node.js | 免费开源 | sharp.pixelplumbing.com,npm install sharp |
| Squoosh | 网页 | 免费 | squoosh.app |
| TinyPNG | 网页 | 免费版有限额 | tinypng.com |
最后
WebP 本身已经是很高效的格式。如果你的 WebP 是 CDN 或构建工具用合理参数生成的,再压的空间可能不大,看到「已最小」是正常的;真正省得多的,往往是那些用高质量参数导出、从 PNG 无损转换来、或者从 GIF 直接转出来没再处理过的文件。
先用 webpinfo 看清楚手里是什么,再按场景挑工具,比在十个工具之间来回试要省时间得多。
ImgZilla 目前仅支持 macOS(12.3 及以上),可在 Mac App Store 下载。免费版每天可压缩 10 张,只有压缩成功才计入额度——把装满 WebP 的文件夹拖进去,看看能省下多少。
