from PIL import Image
im = Image.open(src)
if im.mode in ("RGBA", "LA", "P"):
    im = im.convert("RGBA")
im.save(dst, "WEBP", quality=82, method=6)

商品图 1200 张 PNG 转 WebP 之后,透明背景全变成纯黑,边缘还有一圈黑边。带 alpha 的图占了七成,用 Chrome 打开 .webp 看背景是 #000000。先别急着动参数,把报错原文和时间点记下来,顺序反了容易白折腾。

原因不复杂,转换脚本里先 convert('RGB') 再保存,alpha 通道在转模式那一步就被丢掉了。WebP 编码器拿到三通道数据,透明区域按黑色填充。批量任务里所有图走同一条路径,所以整批都黑。

这次卡住的地方就在「WebP 透明通道丢失」这一环,单独把它拎出来验证,别和其他改动混在同一次发布里。改动写完就同步给同事,下一个人踩同一个坑,成本还是你的。

验证用真实数据走一遍,测试数据太干净,边界情况根本碰不到。

处理上按这个顺序:保存前判断图有没有 alpha 通道 有就用 RGBA;不要无条件转 RGB 只在导出 JPEG 时才去 alpha;需要压平透明底时把 background 显式设成白色;转换后用 identify 抽查格式和通道数。

改完只确认一件事:转出来的 1200 张图透明区域仍是透明,identify 显示的通道数是 4,商品图叠在深色背景上没有黑边。

作者 9823189