jpg画像にテキストを入れるには 2014/01/11
フォトフレームに大量のjpg画像を入れているのだが、画像が表示されるだけでタイムスタンプなどのメタ情報が一切表示されないので、フォトフレームを見ただけではいつの写真だかわからないものが多い。
ローカルで管理しているjpgのファイル名は撮影日時を元にした YYYYMMDDhhmmssの14桁の数字になっているので、とりあえずファイル名をそのまま画像に直接書き出しておけば、画像だけを表示しているフォトフレームでも撮影日時がわかるようになる。
フォトフレームに入れたい画像が5000枚以上あるので、手でやる訳にはいかない。
方法を探った結果、以下のようにPHPでスクリプトを書いた。画像にテキストを入れる方法をググると、PHPでのサンプルが多かったので、 Webアプリケーションでもなんでもないのだが、とりあえずPHPを使った。
<?php
$src_fname = $argv[1]; // 元となる画像ファイルのパス
$dst_fname = $argv[2]; // 出力先のパス
echo "editing $src_fname ...\n";
// $text は画像に印字するテキスト
if (preg_match("/(.*)\\.jpg/", $src_fname, $matches)) {
$text = $matches[1];
} else {
$text = $src_fname;
}
// フォントのファイル名
$font_fname = "/usr/share/fonts/japanese/ipa/ipaexg.ttf";
$img = imagecreatefromjpeg($src_fname);
$color = imagecolorallocate($img, 255, 255, 255);
// フォントの大きさ24, アングル0, 場所左上角(座標 0, 24)でテキストを印字
imagettftext($img, 24, 0, 0, 24, $color, $font_fname, $text);
// 新しい画像をファイルに保存
imagejpeg($img, $dst_fname);
フォントは、既存の環境のどこにフォントがあるのかわからなかったので、とりあえず
http://ipafont.ipa.go.jp/ipaexfont/download.html
からダウンロードして /usr/share/fonts/japanese/ipa/ipaexg.ttf
にインストールした。
imagecreatefromjpg
関数は、画像ファイルから画像をロードする関数である。反対にimagejpg
関数は、画像をファイルに保存する関数である。
imagecreatefromjpg
関数 | PHP Manual
http://php.net/manual/ja/function.imagecreatefromjpeg.php
imagejpg
関数 | PHP Manual
http://php.net/manual/ja/function.imagejpeg.php
imagettftext
でテキストを画像に印字する。今回は、左上に印字したので、固定の座標でよかったが、下とか右端にしたい場合は、その前に画像のサイズを取得しないといけない。
imagegettftext
関数 | PHP Manual
http://php.net/manual/ja/function.imagettftext.php
最初は imagetftext
ではなく、imagestring
を使おうとしたのだが、フォントや大きさの指定の仕方がよくわからなかくてあきらめた。
imagestring
の2つ目の引数がフォントの大きさのようで、
PHPマニュアルには1〜5とされているが、5を指定しても小さすぎたのである。
imagestring
関数 | PHP Manual
http://php.net/manual/ja/function.imagestring.php