ブラウザから文字列オブジェクトを指定して画像に文字を描画する
ブラウザから文字列、フォント、色、サイズ、位置を指定して画像に文字列を描画する簡易デコメール作成システム的なサンプルを作成します。

本サンプルは変数を定義するconfig.php、入力フォームを出力するinput.php、画像を出力するimage.phpの3つのファイルで構成されています。
携帯電話での実行を想定しておりますので入力フォームの表示はSJIS、画像出力部分はUTF-8の文字コードで作成します。
入力フォームの作成
config.phpで定義した変数をinput.phpのformに展開しています。
config.phpでは次のように配列でセレクトボックスに表示すべき値とテキストを連想配列の形式で定義しています。
// 横位置
$x_array = array(
"0"=>"0",
"10"=>"→10",
"20"=>"→20",
# 省略
);
input.phpの入力フォーム生成部分ではPOSTされた変数をプリセットする形でセレクトボックスを出力しています。
横位置
<select name="x">
<?php
foreach($x_array as $k=>$v){
?>
<option value="<?php echo $k; ?>" <?php if($k==$_POST['x']){ ?>selected<?php } ?>><?php echo $v; ?></option>
<?php
}
?>
</select>
画像出力部分
フォームで受け取ったパラメーターをクエリとしてimage.phpに渡します。その際の文字コードをUTF-8に変換してクエリを生成します。
// POSTされた変数の値の文字コードをUTF-8に変換する
mb_convert_variables('UTF-8', 'SJIS', $_POST);
// image.phpに渡す際にURLエンコードする
?>
<img src="image.php?<?php echo http_build_query($_POST); ?>" />
image.php内ではImagickDrawクラスを使って文字列を画像に描画します。
クエリより変数を取得してImagickDrawクラスの各メソッドに渡して文字列オブジェクトを生成します。
画像描画部分
クエリで指定されたパラメーターに合わせて画像に文字を描画します。
// 文字列取得
$text = $_GET['text'];
// 文字サイズ取得
$size = $_GET['size'];
// 横位置取得
$x = $_GET['x'];
// 縦位置取得
$y = $_GET['y'];
// 文字色取得
$colors = explode('-',$_GET['color']);
// フォント取得
$font = $_GET['font'];
// Imagickクラスを生成し、画像を読込み
$im = new Imagick();
$im->readImage("images/lake.jpg");
$canvas = $im->coalesceImages();
// ImagickDrawクラスを生成
$idraw = new ImagickDraw();
if($text){
// フォントのセット
$idraw->setFont('font/'.$font);
// フォントサイズのセット
$idraw->setFontSize($size);
// フォントカラーのセット
$idraw->setFillColor($colors[0]);
$idraw->setStrokeColor($colors[1]);
$idraw->setStrokeWidth(1);
// 画像に描画
$canvas->annotateImage($idraw, $x, $y, 0, $text);
}
// 画像出力
$canvas->setImageFormat("jpg");
$canvas->thumbnailImage(240,0);
$canvas->setCompressionQuality(80);
Header("Content-Type: image/jpg");
echo $canvas;
Imagickを利用すると、上記のようにフォームから送信された変数に応じて動的に画像を出力させるアプリケーションを比較的容易に作成できます。
