画像の連結用スクリプト

こないだSOSH BDPの写真アップするときに、いくつかの画像を連結してアップしたんだけどその際に作ったバッチ処理用プログラムの公開。

簡単なターミナルの使い方、シェルスクリプトの使い方、及びMacPortsの使い方が分かる人なら使える情報かと。

画像の連結にはImageMagickに付属するmontageというとても便利なコマンドがあります。ここにmontageの詳しい使い方が説明されています。僕はMacPortsでImageMagickを入れているんだけど、もしかするとバイナリでの提供とかあるかもしれないので、その場合はMacPorts使わなくてもいいと思います。

ただ、montageだけで連結した画像のスペーシングを1pxにする方法がよく分からなかった。どうしても全体のスペーシングというより個々の画像のボーダーを指定してから、連結みたいな流れ。そのため、画像と画像の間のボーダーが2px(1px + 1px)になっちゃうんです。それだけならまだしも、連結がない上下、左右の部分は1pxに。それはちょっとナイ感じ。

なので、convertとmontageを使って強引に実装してみました。かなりヤッツケです。こんな感じで一発でデキルヨって情報もっている人いたら教えてください♪

[sourcecode language=’perl’]
#!/bin/bash
#
# 4枚の画像を縦2x横2のならびに連結
#
# 使い方
#
# ~$ ./2x2montage.sh 画像1 画像2 画像3 画像4 出力ファイル
#
# 出力ファイルの構成
#
# 画像1 画像2
# 画像3 画像4
#

# 画像を250×250におさまるサイズに変換
convert -quality 100 -resize 250×250 $1 temp1a.jpg
convert -quality 100 -resize 250×250 $2 temp2a.jpg
convert -quality 100 -resize 250×250 $3 temp3a.jpg
convert -quality 100 -resize 250×250 $4 temp4a.jpg

# 画像1の右辺に1pxの白線を付ける
height=`identify -format %h temp1a.jpg`
convert -quality 100 temp1a.jpg -size 1x${height} xc:white +append temp1b.jpg

# 一時ファイルの削除
rm -f temp1a.jpg

# 画像1と画像2を横に連結
montage temp1b.jpg temp2a.jpg -geometry +0+0 temp1_2.jpg

# 連結画像1の下辺に1pxの白線を付ける
width=`identify -format %w temp1_2.jpg`
convert -quality 100 temp1_2.jpg -size ${width}x1 xc:white -append montage1.jpg

# 一時ファイルの削除
rm -f temp1b.jpg
rm -f temp2a.jpg
rm -f temp1_2.jpg

# 画像3の右辺に1pxの白線を付ける
height=`identify -format %h temp3a.jpg`
convert -quality 100 temp3a.jpg -size 1x${height} xc:white +append temp3b.jpg

# 画像3と画像4を横に連結
montage temp3b.jpg temp4a.jpg -geometry +0+0 montage2.jpg

# 一時ファイルの削除
rm -f temp3a.jpg
rm -f temp3b.jpg
rm -f temp4a.jpg

# 連結画像1と連結画像2を縦に連結
montage montage1.jpg montage2.jpg -tile 1x -geometry +0+0 $5

# 一時ファイルの削除
rm -f montage1.jpg
rm -f montage2.jpg
[/sourcecode]

実行するとこんな感じに仕上がります。

*

  
※ちなみに先日アップしたSOSH BDPの連結写真はバッチスクリプトにバグがあったため、スペーシングの白線が細く汚くなってます。あしからず。


投稿日

カテゴリー:

投稿者:

タグ:

コメント

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です