图片WebP批量转换自动化脚本节省带宽
为什么需要WebP批量转换
网站加载速度受图片大小影响很大。
JPEG或PNG格式的图片占用空间大,加载时容易消耗带宽,导致页面变慢、流量费用增加。
WebP是Google推出的图片格式,同等画质下体积比JPEG小25%~35%,比PNG更小。
如果服务器上已经积累了大量老图片,手动一张张转换显然不现实。
本文提供的 图片WebP批量转换自动化脚本 能够扫描整个目录,把常见格式(jpg、jpeg、png)转成WebP,并保留原始文件。
配合计划任务(crontab)定期执行,新上传的图片也会自动处理,长期省带宽。
准备工作
执行脚本前需要确保系统满足两个条件:
- 安装cwebp工具(Google官方WebP编码器)
- CentOS/Rocky:
sudo yum install libwebp-tools - Ubuntu/Debian:
sudo apt install webp
- 确认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图片测试显示是否正常
常见坑点
- cwebp命令找不到:检查是否安装成功,或者尝试完整路径
/usr/bin/cwebp - 中文文件名乱码:脚本中使用了
basename,一般不会出错,但如果系统locale非UTF-8可能异常,建议在脚本开头添加export LANG=zh_CN.UTF-8 - 转换后图片质量不满意:调整
-q参数,数值范围0-100,默认75。如果追求高质量可设为90,体积会增大但仍比原图小 - 原始文件被删除:本脚本只生成.webp,不会动原始文件。如果需要自动删除原始图片,请谨慎操作,建议先观察一段时间
常见问题解答
问:WebP兼容性如何?旧浏览器会不会看不到?
答:目前Chrome、Firefox、Edge等主流浏览器均已支持WebP。如果面向少量老旧用户,可以用 标签做回退,或者在Nginx层面做判断。但大多数场景下直接使用WebP不会影响访客。
问:脚本每次都会重复转换所有图片吗?
答:不会。脚本中已经判断如果.webp文件比源文件新则跳过,因此增量转换非常高效。
问:能不能一次处理多个目录?
答:可以修改脚本中的 IMG_DIR 变量为数组或用 for 循环传入多个路径,但建议保持简单,不同目录分别设置定时任务更清晰。
掌握了这套 图片WebP批量转换自动化脚本,你可以在几分钟内部署到服务器,之后每天自动压缩图片,带宽和加载速度都会有明显改善。
如果在使用中遇到其他问题,欢迎在评论区留言交流。