平日WEB系SE 週末時々自転車屋

WEB系の技術ネタや大好きなお酒、週末手伝う自転車屋の話などを書きます。

PHPで画像に簡単に日本語を書き込む方法

たまたま仕事で要望があり、試したところ、PHPで画像を扱うのが思ったより簡単だったので、記事にしてみます。

 

前提

  • OS centOS5.6(ちょっと古いです)
  • PHP 5.3.8(yumでインストール)
  • apache 2.2.3(yumでインストール)

 

画像の操作には何はさておき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()で画像を読み込めるので、こちらの関数を使います。

 

用意した画像はこれです。

f:id:jitenshaya_se:20150703164625p:plain

 

サンプルコードはこんな感じです。

 

<?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経由で呼び出されたときにレスポンスとしてそのまま生成した画像を返すプログラムとなります。

 

表示はこんな感じです。

f:id:jitenshaya_se:20150703164454p:plain

 

ローカルに保存したいときは // 画像を出力 となっている部分を下のコードに書き換えるだけです。

//画像の出力先
$pass = "gazou.png";

// 画像をファイルとして保存します
imagepng($im, $pass);

 

思ったより簡単にできたのでびっくりです。

 

やっぱりPHPは簡単な言語だなーと思う今日この頃です。