描画する文字列オブジェクトを定義する
描画する文字列オブジェクトはImagickDrawクラスで定義します。
ImagickDrawクラス内の以下のメソッドで描画する文字列オブジェクトのプロパティを指定します。
$idraw = new ImagickDraw(); // フォントを指定 $idraw->setFont('font/uzura.ttf'); // フォントのサイズを指定 $idraw->setFontSize(30); // フォントの色を指定 $idraw->setFillColor('#F6AEC8'); // フォントの縁の色を指定 $idraw->setStrokeColor("#000000"); // フォントの縁の幅を指定 $idraw->setStrokeWidth(1);
その他の代表的なImagickDrawクラスのメソッドには次のようなものがあります。
メソッド名 | 概要 |
setFontStyle(フォントスタイル) | フォントのスタイル指定 |
setStrokeAntialias(true) | フォントの縁取枠線のアンチエイリアス処理を指定 |
setFillAlpha(透過率) | 文字色の塗りつぶしの際の透過度を指定 |
rotate(角度) | 文字の角度を指定 |
scale(横方向の拡大率, 縦方向の拡大率) | 横方向、縦方向の拡大率を指定 |
文字列を横に描画する
文字列の描画は、ImagickのannotateImageメソッドを用いてImagickDrawクラスで定義したオブジェクトを取り込むことで行います。
文字列を横に描画する場合はannotateImageメソッド内で始点を指定することで任意の位置に描画できます。
// 描画する文字 $string = "お昼寝中"; // 横書きで出力 $canvas->annotateImage($idraw, 10, 100, 0, $string);
annotateImageメソッドの構文は次のとおりです。
$canvas->annotateImage(ImagickDrawオブジェクト, 横位置, 縦位置, 角度, 文字列);
文字列を縦に描画する
文字列を縦に描画する場合は、ImagickのannotateImageメソッドがデフォルトで横配置ですので、描画する文字列を1文字単位で分割して1文字単位で始点を指定することになります
// 最初の位置 $_x = 190; $_y = 40; // 文字の先頭から○番目 $i = 0; // 間隔 $s = 5; // フォントサイズ $fonts = 30; while(1){ // 文字列がなくなるまで行う if(mb_strlen($string)==0){ break; } // 1文字ずつ取り出す $moji = mb_substr($string,0,1,'UTF-8'); $string = mb_substr($string,1,mb_strlen($string),'UTF-8'); // 1文字単位での表示 $canvas->annotateImage($idraw, $_x, $_y + $i * ($fonts + $s), 0, $moji); $i++; // 無限ループ防止 if($i>100) break; }
以下の図のように文字の縦位置は前の文字よりも縦位置を「$fonts + $s」分下げて配置しています。
縦位置をずらすのを忘れた場合には、すべての文字が重なって表示されてしまいますのでご注意ください。