ローカルの画像ファイルを別サーバーの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_conv.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/\..*$//')

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

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

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

img_conv.sh使い方

画像ファイルを~/Desktop/imgsに入れます。
~/Desktop/imgsの中にある画像ファイルをpngに変換
./img_conv.sh png
~/Desktop/imgsの中にある画像ファイルをjpgに変換
./img_conv.sh jpg
~/Desktop/imgsの中にある画像ファイルをavifに変換/
./img_conv.sh avif

変換後の画像ファイルが~/Desktop/imgs_returnに保存されます。

変換後の画像ファイル保存場所を指定
~/Desktop/imgsの中にある画像ファイルをpngに変換。スクリプトと同じ場所に保存。
./img_conv.sh png "" .
~/Desktop/imgsの中にある画像ファイルをjpgに変換。スクリプトと同じ場所に保存。
./img_conv.sh jpg "" .
~/Desktop/imgsの中にある画像ファイルをavifに変換。スクリプトと同じ場所に保存。
./img_conv.sh avif "" .

行末の.を実在するディレクトリに変更することで、変換後の画像ファイルの保存先を指定できます。

変換前の画像ファイル保存場所を指定
スクリプトと同じ場所にある画像ファイルをpngに変換。
./img_conv.sh png . ""
スクリプトと同じ場所にある画像ファイルをjpgに変換。
./img_conv.sh jpg . ""
スクリプトと同じ場所にある画像ファイルをavifに変換。
./img_conv.sh avif . ""

変換後の画像ファイルが~/Desktop/imgs_returnに保存されます。

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