への呼び出しの結果が与えられた場合、テキストが境界ボックスを超えないようimagettfbbox()
に に提供する正しいピクセル単位の点は何ですか?imagettftext()
次のように、境界ボックスからベースラインの幅/高さと x/y を決定しています。
$box = imagettfbbox($size, $angle, $font, $text);
$boxXCoords = array($box[0], $box[2], $box[4], $box[6]);
$boxYCoords = array($box[1], $box[3], $box[5], $box[7]);
$boxWidth = max($boxXCoords) - min($boxXCoords);
$boxHeight = max($boxYCoords) - min($boxYCoords);
$boxBaseX = abs(min($boxXCoords));
$boxBaseY = abs(min($boxYCoords));
次に、バウンディング ボックスの寸法のイメージに塗りつぶされた四角形を描画します。
imagefilledrectangle($image, 0, 0, $boxWidth - 1, $boxHeight - 1, $color);
その後、テキストを描画します。
imagettftext($image, $size, $angle, $boxBaseX, $boxBaseY, $color, $font, $text);
ただし、これにより、テキストが四角形から 1 ~ 2 ピクセルはみ出してしまいます。PHP のドキュメントでこの問題を修正しようとする試みをいくつか見てきましimagettfbbox()
たが、それらはすべて、あちこちで 1 つか 2 つのピクセルを差し引くことを提案しているだけで、私にはハックのように思えます。ここで何が起こっているのでしょうか? 正しく処理するために数字をごまかす必要があるのはなぜですか?