ImageMagickで画像に日付を入れる

最近Raspberry Pi でタイムラプス撮影をしてて、画像に日付と時刻を入れたくなったので、ImageMagickを使って作ってみました。

f:id:seitk:20141210001308j:plain

こんなかんじで左下に日付と時刻を入れてくれるよん。ちなみにこれは去年秋葉原で撮った写真ね。

今回作ったスクリプトはサイズが1280x720決め打ちなんでコピペして使うって人はImageMagickのオプションを調べていい感じの位置に表示されるように調整してね。

シェルスクリプト

こんなかんじ


#!/bin/sh
if [ $# -eq 0 ];then
echo "引数がない"
exit 1
fi

for arg in $@
do
	fileName=$(basename ${arg})
	echo ${fileName}

	s=$(identify -format "%[exif:DateTimeDigitized]" ${arg})
	convert ${arg} -fill '#0008' -draw 'rectangle 10,670,260,710' -fill white -pointsize 25 -font Helvetica -draw "text 20,700 '$s'" -background white out_${fileName}
done

やってることは、identify -format "%[exif:DateTimeDigitized]"で得た日付時刻を変数に代入しといて、convertのdrawオプションのとこで展開して画像に書き込んでる。

ところで、シェルスクリプトってこういう書き方でいいのかしら。

PowerShell

実はシェルスクリプト書く前にPowerShellでも作った。こんなかんじ。


Param($file)
$name = [System.IO.Path]::GetFileName($file)
$date = identify.exe -format "%[exif:DateTimeDigitized]" $file

convert $file -fill '#0008' -draw 'rectangle 10,670,260,710' -fill white -pointsize 25 -annotate +20+700 $date -background white -flatten d$name

PowerShellの一括操作って結構ややこしいのね。Get-ChildItem | ForEach-Object{ ./hogehoge.ps1 $_.Name} こんなの。Linuxだとワイルドカード使えてわかりやすいんだが。

結局Raspberry Pi で写真とってるんだから日付を入れる処理もそっちで自動化したほうがいいじゃんとなったので、こっちのコードはお蔵入り。

参考

ImageMagickで画像に日付を入れるやりかたを解説してるところがあんまりなかったのでこのページはとても参考になった。ImageMagick で日付入れてドロップシャドウつけてリサイズ | nDiki

ここはImageMagickExifを見る方法が書いてる。[ImageMagick] Exif情報を取得するコマンド - DQNEO起業日記

ImageMagickで文字列を扱う方法はこのページにお世話になった。ImageMagick でシンプルなテキストイメージを作成する | Amrta