PHPで画像に簡単に日本語を書き込む方法
たまたま仕事で要望があり、試したところ、PHPで画像を扱うのが思ったより簡単だったので、記事にしてみます。
前提
画像の操作には何はさておきGDライブラリ
画像の操作にはGDライブラリを使うのが簡単なので、まずはGDライブラリをインストールします。
CentOsにGDライブラリをインストールのはyumで簡単にインストールできます。
yum -y install php-gd
日本語フォントのインストール
画像に日本語を差し込まないなら不要なのですが、日本語を差し込む場合日本語フォントが必要となるので、インストールします。
こちらも面倒なのでyumで一括インストールします。
yum -y groupinstall "Japanese Support"
yumでインストールすると、/usr/share/fontsの配下に japanese と ja のフォルダが作られ、その下にフォントがインストールされます。
この後apacheを再起動すれば準備は完了です。
文字を差し込む画像を用意する
imagecreatetruecolor()を使えば、0から画像を生成できますが、外枠など凝ったものを作るのには向いていないので、あらかじめ外枠画像(png形式)を用意し、こちらを利用します。
既存の画像を扱う場合はimagecreatefrompng()で画像を読み込めるので、こちらの関数を使います。
用意した画像はこれです。
サンプルコードはこんな感じです。
<?php
//差し込むテキスト
$text = "テストのテキストです。ちゃんと表示できました。\n1234567890壱弐参四五六七八九〇123456789012345678901234";
//サンプル画像へのパス
$im = imagecreatefrompng("test.png");
//フォントへのパス
$font = '/usr/share/fonts/japanese/TrueType/sazanami-gothic.ttf';
//テキストの色
$textcolor = imagecolorallocate($im, 10, 10, 10);
//テキストのサイズ(単位はpx)
$fontsize = 12;
//テキストを表示するときのの角度
$angle = 0;
//テキストを表示する位置のX座標
$x = 5;
//テキストを表示する位置のY座標
$y = 20;
//テキストの画像への書き込み
imagettftext($im, $fontsize, $angle, $x, $y, $textcolor, $font, $text);
//画像の形式を指定
header('Content-Type: image/png');
// 画像を出力
imagepng($im);
// メモリを開放
imagedestroy($im);
?>
こちらはapache経由で呼び出されたときにレスポンスとしてそのまま生成した画像を返すプログラムとなります。
表示はこんな感じです。
ローカルに保存したいときは // 画像を出力 となっている部分を下のコードに書き換えるだけです。
//画像の出力先
$pass = "gazou.png";
// 画像をファイルとして保存します
imagepng($im, $pass);
思ったより簡単にできたのでびっくりです。
やっぱりPHPは簡単な言語だなーと思う今日この頃です。