在这个任务中,Bash 脚本需要检查图片的文件大小和尺寸(宽度和高度),然后决定是否压缩图片。我们可以继续使用 jpegoptim
和 pngquant
来压缩 .jpg
和 .png
图片。为了检查图片的尺寸,使用 imagemagick
的 identify
命令来获取宽度和高度。
准备工具:
- 安装
imagemagick
:用于检查图片的宽高和处理图片。 - 安装
jpegoptim
:用于压缩.jpg
图片。 - 安装
pngquant
:用于压缩.png
图片。
安装命令(适用于 Debian/Ubuntu 系列 Linux):
sudo apt-get update
sudo apt-get install imagemagick jpegoptim pngquant
脚本内容:
#!/bin/bash
# 压缩JPG图片
compress_jpg() {
local file="$1"
echo "压缩JPG文件: $file"
jpegoptim --max=85 "$file" # 将质量降低到85%,根据需要调整
}
# 压缩PNG图片
compress_png() {
local file="$1"
echo "压缩PNG文件: $file"
pngquant --ext .png --force 128 "$file" # 将颜色数量减少到128
}
# 检查文件大小和尺寸
check_and_compress() {
local file="$1"
# 获取文件大小
filesize=$(stat -c%s "$file")
# 获取图片的宽高信息 (使用ImageMagick的identify)
dimensions=$(identify -format "%w %h" "$file")
width=$(echo $dimensions | cut -d' ' -f1)
height=$(echo $dimensions | cut -d' ' -f2)
# 检查文件大小是否大于60KB,或者宽高是否大于500px
if [ $filesize -gt 61440 ] || [ $width -gt 500 ] || [ $height -gt 500 ]; then
echo "文件大小或尺寸超过限制,进行压缩: $file"
# 根据文件类型调用不同的压缩方法
if [[ $file == *.jpg || $file == *.jpeg ]]; then
compress_jpg "$file"
elif [[ $file == *.png ]]; then
compress_png "$file"
fi
else
echo "$file 大小和尺寸均符合要求,无需压缩"
fi
}
# 查找并处理图片
find . \( -name "*.png" -o -name "*.jpg" -o -name "*.jpeg" \) -type f | while read file; do
check_and_compress "$file"
done
echo "压缩完成!"
脚本说明:
-
check_and_compress
函数:- 获取图片文件大小(字节为单位)。
- 使用
identify
获取图片的宽度和高度。 - 检查图片的大小是否大于 60KB,或宽度/高度是否大于 500px。
- 如果条件满足,调用
compress_jpg
或compress_png
进行压缩。
-
压缩函数:
.jpg
文件使用jpegoptim
进行压缩,降低质量到 85%。.png
文件使用pngquant
进行压缩,颜色减少到 128 色。
-
查找和处理:
- 使用
find
查找当前目录下的.jpg
,.jpeg
,.png
文件。 - 对每个文件调用
check_and_compress
进行检查和压缩。
- 使用
使用方法:
将脚本保存为 compress_images.sh
,然后给予执行权限并运行:
chmod +x compress_images.sh
./compress_images.sh
脚本执行结果:
该脚本会自动处理当前目录下的图片,判断文件大小和分辨率是否超出规定,并对超出限制的图片进行压缩处理。
标签:500px,压缩,compress,jpg,file,大于,png,图片 From: https://www.cnblogs.com/imzhi/p/18459812