需安裝 ImageMagick(提供 convert 命令):
# CentOS/RHEL
yum install ImageMagick
# Ubuntu/Debian
apt-get install imagemagick
# macOS
brew install imagemagick
遞歸掃描目錄下所有 JPG 圖片,生成兩種縮略圖:
_m)_s)#!/bin/bash
# 批量圖片壓縮腳本
# 用法:放入圖片根目錄執行,或指定目錄作為參數
IMG_DIR="${1:-.}" # 默認當前目錄
cd "$IMG_DIR" || exit 1
echo "開始處理目錄: $IMG_DIR"
for file in */*.jpg; do
# 跳過已生成的縮略圖
[[ "$file" =~ _[ms]\.jpg$ ]] && continue
# 提取文件名與擴展名
base_name="${file%.*}"
ext="${file##*.}"
# 目標文件名
middle_file="${base_name}_m.${ext}"
small_file="${base_name}_s.${ext}"
echo "處理: $file"
# 生成中等尺寸 (300x180) - ! 表示強制縮放不保持比例
convert "$file" -resize 300x180! "$middle_file"
[[ -f "$middle_file" ]] && echo " ✓ 生成: $middle_file"
# 生成小尺寸 (100x60)
convert "$file" -resize 100x60! "$small_file"
[[ -f "$small_file" ]] && echo " ✓ 生成: $small_file"
done
echo "批量處理完成!"
| 參數 | 含義 | 示例 |
|---|---|---|
300x180! | 寬 300、高 180,強制縮放(忽略原比例) | 輸出固定 300×180 |
300x | 寬 300,高按比例自動計算 | 等寬縮放 |
x300 | 高 300,寬按比例自動計算 | 等高縮放 |
300x180 | 寬≤300、高≤180,保持比例縮放 | 縮略圖模式 |
xargs -P 或 GNU parallel 利用多核 CPU
find . -name "*.jpg" -print0 | xargs -0 -P 4 -I {} convert {} -resize 300x180! {}_m.jpg
-quality 85 平衡體積與清晰度
convert "$file" -resize 300x180! -quality 85 "$middle_file"
convert "$file" -resize 300x180! "${base_name}_m.webp"
find . -maxdepth 2 -name "*.jpg"convert 返回碼,記錄失敗文件| 問題 | 原因 | 解決 |
|---|---|---|
| command not found: convert | ImageMagick 未安裝或不在 PATH | 安裝包、檢查 which convert |
| 權限拒絕 | 目錄/文件無寫入權限 | chmod -R u+w 或以適當用戶運行 |
| 輸出圖片變形 | 使用 ! 強制縮放 | 移除 ! 保持比例,或預先裁剪 |
| 處理超大圖片記憶體溢出 | ImageMagick 預設內存限制 | 設置環境變量 MAGICK_MEMORY_LIMIT 或使用 -limit memory |
基於 ImageMagick 的 convert 命令配合 Shell 腳本,可快速實現生產級批量圖片處理流程。掌握 resize 參數語法、質量控制、並行優化等技巧,能滿足絕大多數 Web 圖片處理需求。