ImageMagickで画像クイズを作る


やったこと

複数の画像を並べて1枚の画像クイズを作った.









画像:いらすとや

実装

bash + ImageMagick

convert -crop でトリミングする

crop.sh
# crop {source directory} {target directory}

WIDTH=126
HEIGHT=102
for FILEPATH in `ls $1/*`
do
convert ${FILEPATH} -gravity center -crop ${WIDTH}x${HEIGHT}+0+0 $2/`basename ${FILEPATH}`
done

convert label でナンバリングする

rannotate.sh
# rannotate {source directory} {target directory}

BGCOLOR='#61B859'
COUNTER=1
for FILEPATH in `ls $1/* | sort -R`
do
convert ${FILEPATH} -background ${BGCOLOR} -pointsize 24 label:${COUNTER} +swap -gravity Center -append $2/`printf %02d $COUNTER`.${FILEPATH##*.}
COUNTER=$(( COUNTER + 1 ))
done

montage -tile で並べる

tile.sh
# tile {source directory} {target file}

COLNUM=6
magick `ls $1/*` pnm:- | montage - -tile ${COLNUM}x -geometry +0+0 $2

1連の処理をまとめる

tile+.sh
# tile+ {source directory} {target file}

DIR=`dirname $0`
mkdir /tmp/cropped
rm /tmp/cropped/*
${DIR}/crop.sh $1 /tmp/cropped
mkdir /tmp/annotated
rm /tmp/annotated/*
${DIR}/rannotate.sh /tmp/cropped /tmp/annotated
${DIR}/tile.sh /tmp/annotated ${2:-tiled.png}

crop.sh, rannotate.sh, tile.sh, tile+.sh を同ディレクトリに配置する.

学び

  • basenamedirname
  • montageはデフォルトでラベルをつけるためmagick pnm:-をかませて消去する.
  • デフォルト変数${VAR:-default}