こんなときどうする?テスト画像をいっぱいつくらなアカンねん ~imagemagick活用編~
とある画像投稿サイトの制作で、テスト画像が大量に必要になりました。
大(250x250通常表示用)、中(165x165サムネイル用)、小(80x80アイコン用)各800枚!合計2400枚!!
画像内のテキストはそれぞれ異なったものを入れ、グループごとに画像の色を変えたいという要望もありました。
1枚1枚ドローソフトで作っていては大変!
ということで、imagemagickを使ってテスト画像を生成することにしました。
まずは、左から順に、下記の内容でカンマ区切りのcsvデータを作成します。
画像に描画するテキスト,画像サイズ(横),画像サイズ(縦),ファイル名,背景色
次にcsvを読み込んで、imagemagick のconvertコマンドを実行するスクリプトを用意します。
スクリプト言語は外部コマンドが呼び出せれば何でもいいのですが、今回はrubyを使うことにします。
#!/usr/bin/env ruby require 'kconv' jp_font = '/usr/local/share/fonts/truetype/mplus-ipa/M+1P+IPAG.ttf' File.open('tiptest.csv') do |fh| fh.each_line do |line| array_data = line.split(',') txt_contents = array_data[0].toutf8 size_w = array_data[1] size_h = array_data[2] file_name = array_data[3] bg_color = array_data[4] system ("convert -font #{jp_font} -size #{size_w}x#{size_h} xc:'#{bg_color}' -pointsize 30 -draw \"text 10,50 '#{txt_contents}'\" -channel Default image/#{file_name}") end end
csvファイルを一列ずつ読み込んで、system(”……”)の部分でconvertコマンドを実行を実行しています。
今回使用しているConvertコマンドのオプションについては下記の通りです。
- -font name イメージに書き込むテキストのフォント指定
- -size width{xheight}{+offset} イメージの幅、高さをオフセットを合わせて指定xcで背景色を指定
- -pointsize calue PostScript,OPTION1,TrueType fontのポイントサイズを指定
- -draw string イメージにprimitiveのイメージを付ける テキストprimitiveは、text x0,y0 stringで指定
- -channel type 〜 color channelの指定
スクリプト実行でこんな感じに画像が生成されます。
画像のリサイズについては、上記のcsvのように指定を入れてもいいのですが、負荷を考えるとConvertコマンドの-resizeオプションで処理した方がいいかもしれません。
※filenameで指定したファイルを165x165にリサイズする。
convert -resize 165x165 filename
特定のディレクトリ内のjpegを一括でリサイズする場合は、下記のようなシェルスクリプトで一括処理することができます。
※カレントディレクトリの.jpgファイルサイズを全て80x80にリサイズする。
for I in *.jpg; do convert -resize 80x80 ${I} ${I}; done
描画やリサイズだけでなく、imagemagickは他にも色々なことができます。
ぜひ一度試してみてください。