最简方式是用PIL.Image.open()打开PNG后直接save(format="WEBP");需确认Pillow支持WEBP(检查Image.SAVE)、处理RGBA模式兼容性、合理设置quality或lossless参数。

用 PIL.Image.save() 转换单张 PNG 到 WEBP 最简方式
核心就是打开 PNG 后直接调用 save(),指定 format="WEBP"。不需要额外安装库(Pillow 本身支持 WEBP 写入,但需确认是否启用)。
常见错误是没装带 WEBP 支持的 Pillow:系统缺少 libwebp 时,Pillow 编译会跳过 WEBP,运行时不会报错,但生成的文件实际是空或损坏 —— 可用 file your_image.webp 或 Python 中 Image.open().format 验证。
- 先检查支持情况:
from PIL import Image; print('WEBP' in Image.SAVE) - 若输出
False,重装 Pillow:pip uninstall Pillow && pip install Pillow --force-reinstall --no-cache-dir(macOS/Linux 推荐先装libwebp-dev或webp包) - 转换示例:
from PIL import Image<br>img = Image.open("input.png")<br>img.save("output.webp", format="WEBP", quality=80)
批量处理时用 pathlib 遍历比 os.listdir 更稳
pathlib 自动处理路径分隔符、相对路径和隐藏文件,避免手动拼接字符串出错(比如 Windows 下 "folder\" + name 混用反斜杠和斜杠)。
- 只处理当前目录下所有
.png文件:from pathlib import Path<br>for p in Path(".").glob("*.png"): <br> with Image.open(p) as img:<br> img.save(p.with_suffix(".webp"), format="WEBP", quality=85) - 递归进子目录:
Path(".").rglob("*.png") - 目标目录不存在时,先创建:
p.with_suffix(".webp").parent.mkdir(parents=True, exist_ok=True)
quality 和 lossless 参数影响大,别全用默认值
WEBP 默认是有损压缩,quality=75 是 Pillow 的默认值,但多数场景 80–85 更平衡;设为 100 也不等于无损,真要无损得显式加 lossless=True。
仅使用 Python 将 Claw Code 虚拟化框架与 OpenClaw 集成,提供 184 种工具和 200 多条命令,用于安全分析和代码质量...
立即学习“Python免费学习笔记(深入)”;
-
lossless=True时,quality参数被忽略(即使写了也无效) - 有损模式下,
quality=50文件体积约是 PNG 的 1/3,但可能在渐变区域出现色带;quality=90体积接近 PNG,但解码更快 - 透明通道保留:PNG 的 alpha 会被自动保留,无需额外参数;但若源图是 RGB 模式(无 alpha),强行保存 WEBP 也不会添加透明通道
遇到 OSError: cannot write mode RGBA as WEBP 怎么办
这是 Pillow 的老问题:部分旧版本对 RGBA 模式写 WEBP 支持不完整,尤其 macOS 上常见。不是图片本身有问题,而是 Pillow 内部模式映射失败。
- 最简修复:转成 RGB 或 RGBA 后再存(取决于是否需要透明):
if img.mode in ("RGBA", "LA"): <br> # 保留透明:转成 RGBA 并确保支持<br> img = img.convert("RGBA")<br>else:<br> img = img.convert("RGB") - 更稳妥做法:统一转为
"RGB"(丢弃 alpha)或"RGBA"(保留 alpha),再调用save - 注意:
convert("RGBA")对非透明图会添加全白 alpha 通道,体积略增
批量脚本跑起来很快,但真正容易卡住的是环境依赖和隐式模式转换——尤其是跨平台部署时,libwebp 缺失或 Pillow 版本不一致,会导致同一段代码在本地成功、CI 失败。建议把 Image.SAVE 检查和 img.mode 校验写进主循环开头。

















