Monday, June 01, 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>sample1106(ImageMagick6.5.2)</title>
</head>
<body>
<?php
/* メッセージ(UTF-8でファイルを保存する) */
$msg = "サンプル";
/* 余白 */
$padx = 20;
$pady = 5;
/* 枠の色 */
$bc = "#d0d0d0ff";
/* 塗りつぶし色 */
$fc = "#00000080";
/* 文字色 */
$tc = "white";

$im = new Imagick();
$idraw = new ImagickDraw();
/* フォント設定 */
$idraw->setFont('C:\\Windows\\Fonts\\MSGOTHIC.TTC');
/* フォントサイズ設定 */
$idraw->setFontSize(30);
/* gravity設定 */
$idraw->setGravity(Imagick::GRAVITY_CENTER);
/* 文字列のサイズ取得 */
$metrics = $im->queryFontMetrics($idraw, $msg);
$im->newPseudoImage($metrics["textWidth"]+$padx*2,
$metrics["textHeight"]+$pady*2, "xc:none");
/* 角丸四角 */
$idraw->setFillColor($fc);
$idraw->setStrokeColor($bc);
$idraw->roundrectangle(0,0,
$metrics["textWidth"]+$padx*2-1,
$metrics["textHeight"]+$pady*2-1,
10,10);
/* 文字色 */
$idraw->setFillColor($tc);
$idraw->setStrokeColor($tc);
$idraw->annotation(0, 0, $msg);

$im->drawImage($idraw);

$im->writeImage('sample1106a.png');

$im2 = new Imagick("sf.jpg");

$im2->compositeImage($im,
Imagick::COMPOSITE_OVER, 20, 100, Imagick::CHANNEL_ALL);
$im2->writeImage('sample1106b.png');

$idraw->destroy();
$im2->destroy();
$im->destroy();
?>
<img src="sample1106a.png" /><br />
<img src="sample1106b.png" /><br />

</body>
</html>


出力画像1(sample1106a.png)
Imagickで描画した文字列の大きさにフィットする角丸四角

出力画像2(sample1106b.png):重ねあわせ例


関連項目
ImageMagickとPHPで手書き風の円に囲まれた文字を描画する
ImageMagickとPHPでバンド状グラデーションの文字列を描画する
ImageMagickとPHPで、円形のドットの文字列を描画する

No comments: