愈发感受 webp 格式的强大,在博客里大部分用例下使用 webp 可以使图片占用的空间降低一个数量级,所以目前所有的图片资源都要转成 webp 后使用,一个一个转换效率太低,于是写了个脚本,可以批量将本目录下的常见格式图片转换为 webp 格式。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#!/usr/bin/env bash

# 创建备份文件夹
mkdir "bak"

# 利用ls和正则获取当前目录下的所有图片路径存入数组
images=$(ls *.{png,jpg})

for image in $images
do
# -q 90 指定转换质量,经试验这个值效果和压缩率都不错
cwebp $image -q 90 -o ${image%.*}.webp
mv $image ./bak/$image
done

更新(2023-07-04)

下面的脚本可以实现当原始图片尺寸超出指定大小时,自动对其进行缩放

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#!/usr/bin/env bash

# 设置宽高的最大值
MAXWH=2160

# 创建备份文件夹
mkdir "bak"

# 利用ls和正则获取当前目录下的所有图片路径存入数组
images=$(ls *.{png,jpg})

for image in $images
do
size=$(identify $image | awk '{print $3}')
wh=(${size//x/ })
w=${wh[0]}
h=${wh[1]}

resize=''

if [ $w -gt $h ]
then
if [ $w -gt $MAXWH ]
then resize="-resize ${MAXWH} 0"
fi
else
if [ $h -gt $MAXWH ]
then resize="-resize 0 ${MAXWH}"
fi
fi

# -q 90 指定转换质量,经试验这个值效果和压缩率都不错
cwebp $image -q 90 $resize -o ${image%.*}.webp
mv $image ./bak/$image
done