首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Linux 批量圖片壓縮 Shell 腳本:基於 ImageMagick 實現多尺寸生成

     編輯:Java 相關知識

工具準備

需安裝 ImageMagick(提供 convert 命令):

# CentOS/RHEL
yum install ImageMagick

# Ubuntu/Debian
apt-get install imagemagick

# macOS
brew install imagemagick

腳本功能

遞歸掃描目錄下所有 JPG 圖片,生成兩種縮略圖:

  • 中等尺寸:300×180 強制縮放(後綴 _m)
  • 小尺寸:100×60 強制縮放(後綴 _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,保持比例縮放縮略圖模式

進階優化建議

  1. 並行處理:使用 xargs -P 或 GNU parallel 利用多核 CPU
    find . -name "*.jpg" -print0 | xargs -0 -P 4 -I {} convert {} -resize 300x180! {}_m.jpg
  2. 質量控制:添加 -quality 85 平衡體積與清晰度
    convert "$file" -resize 300x180! -quality 85 "$middle_file"
  3. 格式轉換:統一輸出 WebP 格式(更小體積)
    convert "$file" -resize 300x180! "${base_name}_m.webp"
  4. 遞歸深度控制:find . -maxdepth 2 -name "*.jpg"
  5. 錯誤處理:檢查 convert 返回碼,記錄失敗文件

應用場景

  • 網站圖片自動生成多規格縮略圖(列表圖、詳情圖、輪播圖)
  • 用戶上傳頭像自動裁剪生成多尺寸
  • 歷史圖片庫批量優化存儲空間
  • CI/CD 流水線中前端資源預處理

常見問題排查

問題原因解決
command not found: convertImageMagick 未安裝或不在 PATH安裝包、檢查 which convert
權限拒絕目錄/文件無寫入權限chmod -R u+w 或以適當用戶運行
輸出圖片變形使用 ! 強制縮放移除 ! 保持比例,或預先裁剪
處理超大圖片記憶體溢出ImageMagick 預設內存限制設置環境變量 MAGICK_MEMORY_LIMIT 或使用 -limit memory

總結

基於 ImageMagick 的 convert 命令配合 Shell 腳本,可快速實現生產級批量圖片處理流程。掌握 resize 參數語法、質量控制、並行優化等技巧,能滿足絕大多數 Web 圖片處理需求。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved