Friday, April 10, 2009

ImageMagickとPHPで文字ごとに背景色が異なる文字列を描画する

Imagickで文字ごとに背景色が異なる文字列を描画するには、以下のコードを実行します。


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="ja"
xml:lang="ja" dir="ltr">
<head>
<title>sample926(ImageMagick6.4.8)</title>
</head>
<body>
<?php
/* 文字ごとに背景色が異なる文字列を描画する */
/* 表示文字列 */
$message_string = "ImageMagick";
/* 描画色 */
$color1 = "#703020";
$color2 = "white";
/* ブロック幅・高さ */
$bw = 20;
$bh = 20;
/* 文字サイズ */
$ps = 15;

$images = new Imagick();
for($sl=0;$sl<strlen($message_string);$sl++){
$dc1 = $sl%2==0?$color1:$color2;
$dc2 = $sl%2==0?$color2:$color1;

$im = new Imagick();
$im->newImage($bw, $bh, $dc1);

$idraw = new ImagickDraw();
/* 塗りつぶし色設定 */
$idraw->setFillColor($dc2);
$im->drawImage($idraw);
/* フォント設定 */
$idraw->setFont('Tahoma-Bold');
/* フォントサイズ設定 */
$idraw->setFontSize($ps);
$idraw->setGravity(Imagick::GRAVITY_CENTER);
$im->annotateImage($idraw, 0, 0, 0,
substr($message_string,$sl,1));

$images->addImage($im);
$idraw->destroy();
$im->destroy();
}
$images->setImageIndex(0);
$im2 = $images->appendImages(false);
$im2->writeImage('sample926a.png');

$images->destroy();
$im2->destroy();
?>
<img src="sample926a.png" /><br />

</body>
</html>


出力画像(sample926a.png)
Imagickで描画した文字ごとに背景色が異なる文字列

No comments: