複数の画像を一枚の紙に表示するスクリプト

複数の画像を一枚の用紙に印刷したい時ってありますよね。
Libre Officeなんかで作成したりしてましたが、いちいち画像のサイズを変えたりレイアウトを調整したりしないといけないので、画像が多くなると面倒です。
もっと簡単に出来ないかなと思っていたのですが、そのような気の利いたアプリは見当たりません。強いて言えば、Photo Collageで出来そうな気もしますが、これはレイアウトをカスタマイズすることが出来ません。
あと、オンラインサービスも幾つかありますが、どうも今ひとつ痒い所に手が届きません。

2020-02-05_17-10

ネットで色々調べていると、ImageMagicのコマンドをスクリプトにして公開してくれている人がいました。ImageMagicは、コマンドラインや他のアプリケーションから呼び出して使うプログラムです。画像操作では強力なプログラムなので、多くの人が利用しています。

2020-02-05_17-21

気になるスクリプトを試してみました。
テキストエディタで新規txtファイルを作成して下記のスクリプトをコピペします。txtファイルの名前を「montaxy.sh」にして、homeに置いて下さい。まとめたい画像を置くフォルダ(フォルダ名)は任意です。下記の場合は「work」というフォルダになっています。ここにまとめたい画像をぶち込んで、端末からコマンドを入力します。コマンドでレイアウトを指定します。
sh montaxy.sh 3(横) 3(縦) 50(圧縮%) 0(余白の幅ピクセル)というコマンドですが、例えば、横方向4列、縦方向5行、圧縮50%、画像どうしの余白4ピクセルの場合、コマンドは「sh montaxy.sh 4 5 50 4」です。画像の枚数により、処理が終わるまで多少時間がかかる場合がありますが、大人しく待ちます。

#montaxy.sh
#複数枚の画像を1枚に結合する
#引数は横の枚数、縦の枚数、圧縮の%
if [ $# -ne 4 ]; then
echo “Usage: $0 横の枚数 縦の枚数 圧縮% 余白の幅” 1>&2
exit 1
fi
montage -tile $1x$2 -resize $3% -geometry +$4+$4 ./work/*.* montaxyout.png

#このスプリクトでは結合しようとする画像はあらかじめworkというディレクトリに入れておきます。
#そして、montaxout.pngというファイルをカレントディレクトリに出力します。
#sh montaxy.sh 3(横) 3(縦) 50(圧縮%) 0(余白の幅ピクセル
#sh montaxy.sh 4 5 50 4
#sh montaxy.sh 3 5 50 1
#sh montaxy.sh 3 5 50 4

結合が成功すると、カレントディレクトリ(この場合はhome)にmontaxout.pngというファイルが作成されます。複数枚の場合は連番で作成されますが、次回には引き継がずに上書きされてしまうので注意して下さい。

2020-02-05_17-39

テストのため画像サイズがバラバラのものの寄せ集めなのでレイアウトが酷いですが、画像サイズが均一ならきれいに整列して結合されるはずです。逆に、ここまでバラバラになるんだったらPhoto Collageでも良いかも知れないですね。(汗)

test