Linux/ImageMagickで一括画像編集するshell

画像ファイルをまとめて拡大縮小する(2018-06-12、追記:2023-07-09)


あるディレクトリに置いた画像を
ImageMagick でそれぞれ別サイズに一括して拡大縮小するための shellです。

Androidでアプリを作る際に、
6種類のサイズの画像を作らないといけないので shell にしました。



shellスクリプト

image.sh とか適当なファイル名で
以下のファイルを保存した後に、
chmod 755 image.sh とかで実行権をつけて、./image.sh とかで実行します。

ざっと解説すると、
BASE_DIREで指定したAndroidプロジェクトに対して
drawable に置いたファイルを複製、サイズ変更しながら、
drawable-hdpiやら、drawable-xxxhdpi やらを作成します。

convert っていうのが画像を編集する ImageMagick のコマンドで、
これを while 文でループさせています。
while最後ののヒアドキュメント(<<EOL で渡している部分)で
「コピー先ディレクトリ  圧縮サイズ%  #コメント文」
をwhile文へ渡しています。

#!/bin/sh

BASE_DIR=プロジェクトの保存場所/AndroidStudioProjects/TestApp/app/src/main/res
SRC_NAME=drawable

SRCDIR="$BASE_DIR/$SRC_NAME"
if [ ! -d $SRCDIR ]; then
    echo "no dir[$SRCDIR]"
    exit 1
fi

while read ff pp cc
do
    DSTDIR="$BASE_DIR/$ff"
    if [ ! -d $DSTDIR ]; then
        mkdir $DSTDIR
    fi
    
    echo "$DSTDIR"
    for ss in `ls $SRCDIR`; do
        echo -n "."
        convert $SRCDIR/$ss -resize "$pp" $DSTDIR/$ss
    done

done <<EOL
drawable-ldpi      25%  #240x320
drawable-mdpi      30%  #320x480
drawable-hdpi      50%  #480x800
drawable-xhdpi     75%  #720x1280
drawable-xxhdpi   100%  #1080x1920
drawable-xxxhdpi  140%  #1440x2560
EOL

はじめに(Androidアプリの画像ファイルについて)

これを書いていた当時はせっせと jpg ファイルを用意していましたが、
2023年現在はほぼ Path の一択です。Bitmap画像は使っていません。

以下でも触れていますが、画像を用意するにも表