PHPのimagettfbboxを使うと、imagettftextで文字列を描画したときの文字列が表示される範囲を取得できます。
まずimagettftextを説明します。
imagettftext($img, $size, 0, $x, $y, $color, $fontfile, $text);
とすると$textで指定した文字列が描画されます。
ベースポイント(左下の座標)が$x,$yとなります。
この場合、描画される範囲の左下と一致すればいいのですが、実際は一致しません。
$pos=imagettfbbox($size, 0, $fontfile, $text);
とすると左下、右下、右上、左上の順でそれぞれの座標が返ります。
この座標はベースポイント($x,$y)との相対座標になります。
次の図は「あい」という文字列にベースポイントを示したものです。
ベースポイントを基準にすると文字列は右下にずれています。
$x = 20;
$y = 130;
imagettftext($img, $size, 0, $x, $y, $col_text, $fontfile, $text);
imagefilledellipse($img, $x, $y, 10, 10, $col_line);
$y = 130;
imagettftext($img, $size, 0, $x, $y, $col_text, $fontfile, $text);
imagefilledellipse($img, $x, $y, 10, 10, $col_line);
これを合わせるにはimagettfbboxを使います。
次の図は、imagettfbboxで取得した相対位置を元に、文字列を正しい位置にずらしたものです。
$x = 20;
$y = 130;
$pos = imagettfbbox($size, 0, $fontfile, $text);
imagettftext($img, $size, 0, $x - $pos[0], $y - $pos[3], $col_text, $fontfile, $text);
imagefilledellipse($img, $x, $y, 10, 10, $col_line);
$y = 130;
$pos = imagettfbbox($size, 0, $fontfile, $text);
imagettftext($img, $size, 0, $x - $pos[0], $y - $pos[3], $col_text, $fontfile, $text);
imagefilledellipse($img, $x, $y, 10, 10, $col_line);
コメント