图片WebP批量转换自动化脚本节省带宽

为什么需要WebP批量转换

网站加载速度受图片大小影响很大。
JPEG或PNG格式的图片占用空间大,加载时容易消耗带宽,导致页面变慢、流量费用增加。

WebP是Google推出的图片格式,同等画质下体积比JPEG小25%~35%,比PNG更小。
如果服务器上已经积累了大量老图片,手动一张张转换显然不现实。

本文提供的 图片WebP批量转换自动化脚本 能够扫描整个目录,把常见格式(jpg、jpeg、png)转成WebP,并保留原始文件。
配合计划任务(crontab)定期执行,新上传的图片也会自动处理,长期省带宽。

准备工作

执行脚本前需要确保系统满足两个条件:

  1. 安装cwebp工具(Google官方WebP编码器)
  • CentOS/Rocky:sudo yum install libwebp-tools
  • Ubuntu/Debian:sudo apt install webp
  1. 确认Shell环境(一般Linux服务器默认已支持bash)

安装完成后,可以用 cwebp -version 验证版本。

编写一键转换脚本

以下脚本会递归处理 /data/images/ 目录下所有.jpg/.jpeg/.png文件,将其转为同名的.webp文件。

#!/bin/bash
# 本脚本用于批量转换图片为WebP格式,节省带宽
# 请根据实际图片目录修改下面路径

IMG_DIR="/data/images"

# 查找所有图片文件(不包含已转换的.webp)
find "$IMG_DIR" -type f \( -iname "*.jpg" -o -iname "*.jpeg" -o -iname "*.png" \) | while read file; do
    # 获取不带扩展名的文件名
    filename=$(basename "$file")
    dir=$(dirname "$file")
    output="${dir}/${filename%.*}.webp"
    
    # 如果目标webp已经存在且比源文件新,则跳过
    if [ -f "$output" ] && [ "$output" -nt "$file" ]; then
        continue
    fi
    
    # 转换:质量设为80(可调整),保留元数据
    cwebp -q 80 "$file" -o "$output" 2>/dev/null
    
    # 检查是否转换成功
    if [ $? -eq 0 ]; then
        echo "已转换: $file -> $output"
    else
        echo "转换失败: $file" >&2
    fi
done

使用说明

  • 将以上内容保存为 /usr/local/bin/webp_convert.sh
  • 赋予执行权限:chmod +x /usr/local/bin/webp_convert.sh
  • 先手动运行一次测试:bash /usr/local/bin/webp_convert.sh

设置定时任务实现自动化

利用Linux的crontab可以每天固定时间执行脚本。

crontab -e

在打开的编辑器中添加一行(例如每天凌晨3点执行):

0 3 * * * /usr/local/bin/webp_convert.sh >> /var/log/webp_convert.log 2>&1

保存后可以用 crontab -l 查看任务列表。
之后系统会自动运行,日志写入 /var/log/webp_convert.log,方便排错。

验证效果与避坑指南

如何验证转换成功

  • 检查图片目录下是否有新增的.webp文件
  • 对比同一图片转换前后的体积:ls -lh original.jpg && ls -lh original.webp
  • 在浏览器中直接访问webp图片测试显示是否正常

常见坑点

  1. cwebp命令找不到:检查是否安装成功,或者尝试完整路径 /usr/bin/cwebp
  2. 中文文件名乱码:脚本中使用了 basename,一般不会出错,但如果系统locale非UTF-8可能异常,建议在脚本开头添加 export LANG=zh_CN.UTF-8
  3. 转换后图片质量不满意:调整 -q 参数,数值范围0-100,默认75。如果追求高质量可设为90,体积会增大但仍比原图小
  4. 原始文件被删除:本脚本只生成.webp,不会动原始文件。如果需要自动删除原始图片,请谨慎操作,建议先观察一段时间

常见问题解答

问:WebP兼容性如何?旧浏览器会不会看不到?
答:目前Chrome、Firefox、Edge等主流浏览器均已支持WebP。如果面向少量老旧用户,可以用 标签做回退,或者在Nginx层面做判断。但大多数场景下直接使用WebP不会影响访客。

问:脚本每次都会重复转换所有图片吗?
答:不会。脚本中已经判断如果.webp文件比源文件新则跳过,因此增量转换非常高效。

问:能不能一次处理多个目录?
答:可以修改脚本中的 IMG_DIR 变量为数组或用 for 循环传入多个路径,但建议保持简单,不同目录分别设置定时任务更清晰。

掌握了这套 图片WebP批量转换自动化脚本,你可以在几分钟内部署到服务器,之后每天自动压缩图片,带宽和加载速度都会有明显改善。
如果在使用中遇到其他问题,欢迎在评论区留言交流。

分享到:
上一篇
数据库分库分表处理百万级跨境商品数据:数据库分库分表实战
下一篇
fail2ban自定义规则拦截跨境扫描恶意IP
1
系统公告

机房迁移升级通知

尊敬的用户: IP 段 103.23.148.x、156.224.29.x 原香港一区线路波动、攻击频繁,平台定于 7 月 5 日凌晨分批迁移至香港 GIA 机房,硬件升级 AMD 铂金机型。 迁移均在凌晨操作,最大程度降低业务影响,迁移期间服务器临时关机; 升级后配置不降低、费用不涨价,数据默认同步迁移; 迁移后 IP 全部更换,请及时修改域名解析、防火墙白名单; 建议提前备份重要数据,有问题可联系在线客服。 感谢理解与支持! 泽御云科技 2026.06.30
服务中心
客服
在线客服
24小时为您服务
咨询
联系我们
联系我们,为您的业务提供专属服务。
24/7 技术支持
如果您遇到寻求进一步的帮助,请过工单与我们进行联系。
24/7 即时支持
泽御云
售前客服
泽御云
泽御云
售后客服
泽御云
技术支持
评价
您对当前页面的整体感受是否满意?
😞
非常不满意
😕
不满意
😐
一般
🙂
满意
😊
非常满意