ローカルの画像ファイルを別サーバーのImagemagickで品質調整してみる

macOS

Macのターミナルから~/Desktop/imgsに入っている画像ファイルを、同一LAN内の別サーバーのImagemagickで画像品質を調整し、Macの~/Desktop/imgs_returnへ保存するシェルスクリプトを作成しました。

前提条件
  • MacのターミナルからImagemagickが入ったサーバーへssh xxx でログイン可能であること。
  • Macのデスクトップにimgsディレクトリ(~/Desktop/imgs)があること。
  • Imagemagickのバージョンは7。6の場合、スクリプト中のmagickをconvertに変えると動くかも。
  • 画像ファイル名に日本語を含んでいないこと。
img_quality.sh
#!/bin/bash

# 変数設定
# Macのターミナルからimagemagickが入ったサーバーへsshでログインする際に指定するホスト名 ssh xxx のxxxの部分を指定
SEND_HOST="xxx"

# 引数チェックと初期値設定
# 引数チェック
if [ -z "$1" ]; then
    echo "使用法: $0 <品質値> <画像ディレクトリ> [<返却用ディレクトリ>]"
    exit 1
fi
# ディレクトリの存在チェック
LOCAL_DIR=${2:-"/Users/$USER/Desktop/imgs"}
if [ ! -d "$LOCAL_DIR" ]; then
    echo "エラー: 指定された画像ディレクトリ '$LOCAL_DIR' が存在しません。"
    exit 1
fi
RETURN_DIR=${3:-"/Users/$USER/Desktop/imgs_return"}
if [ ! -d "$RETURN_DIR" ]; then
    echo "警告: 返却用ディレクトリ '$RETURN_DIR' が存在しません。ディレクトリを作成します。"
    mkdir -p $RETURN_DIR
fi

# 変換形式を小文字に統一
CONVERTED_FORMAT=$(echo "$1" | tr '[:upper:]' '[:lower:]')
CONVERTED_SUFFIX=".$CONVERTED_FORMAT"

echo "$CONVERTED_FORMAT に変換します"
echo "$LOCAL_DIR 変換前画像ファイルの場所"
echo "$RETURN_DIR 変換後画像ファイルの場所"

# 1. 画像ディレクトリ内の画像ファイルのみを取得(指定された形式以外)
FILES=$(ls ${LOCAL_DIR} | grep -E "\.(jpg|jpeg|png|gif|avif|heic)$" | grep -v -i "\.$CONVERTED_FORMAT$")

for FILE in $FILES; do
    # ファイル名に日本語が含まれているかどうかをチェック
    if echo "$FILE" | iconv -f UTF-8 -t ASCII//TRANSLIT &>/dev/null; then

	# ファイル名取得
	base=$(echo "$FILE" | sed 's/\..*$//')

	base="Quality"$1_${base#*_}

	# 拡張子取得
	ext=$(echo "$FILE" | awk -F '[/ .]' '{print $NF}')

        echo "処理中: $base.$ext < $FILE"

	cat $LOCAL_DIR/$FILE | ssh $SEND_HOST "magick - -quality $1 $ext:-" > $RETURN_DIR/$base.$ext
    else
        echo "'$FILE' は日本語を含むため処理をスキップします。"
    fi
done

# 全体の処理終了メッセージ
echo "全ファイルの処理が完了しました。"
img_quality.shに実行権限付与
chmod +x img_quality.sh

img_quality.sh使い方

画像ファイルを~/Desktop/imgsに入れます。
~/Desktop/imgsの中にある画像ファイルの品質を80へ品質調整
./img_quality.sh 80

品質調整後の画像ファイルが~/Desktop/imgs_returnに保存されます。

品質調整後の画像ファイル保存場所を指定
~/Desktop/imgsの中にある画像ファイルを80に品質調整。スクリプトと同じ場所に保存。
./img_quality.sh 80 "" .

行末の.を変更することで、品質調整後の画像ファイルの保存先を指定できます。

品質調整前の画像ファイル保存場所を指定
スクリプトと同じ場所にある画像ファイルの品質を80に品質調整。
./img_quality.sh 80 . ""

品質調整後の画像ファイルが~/Desktop/imgs_returnに保存されます。

タイトルとURLをコピーしました