При использовании шрифта TrueType вы используете функцию imageftbbox
, чтобы получить ограничивающую рамку для набора строк с вашим шрифтом. Ограничительная рамка дает смещения от базовой точки до четырех углов в прямоугольнике, занятом текстом. Так что если вы сохраните ограничивающий прямоугольник в $bb
и используете imagefttext
, чтобы поместить текст в ($x, $y)
, то углы будут иметь следующие координаты:
($x + $bb[6], $y + $bb[7]) ($x + $bb[4], $y + $bb[5])
+-------+
| Hello |
+-------+
($x + $bb[0], $y + $bb[1]) ($x + $bb[2], $y + $bb[3])
Это говорит нам о том, что мы хотим, чтобы ширина изображения составляла ($x + $bb[2]) - ($x + $bb[6]) = $bb[2] - $bb[6]
и аналогично высота изображения составляла $bb[3] - $bb[7]
. Текст должен быть визуализирован с координатами (-$bb[6], -$bb[7])
внутри изображения, так как мы хотим иметь
(0, 0) = ($x + $bb[6], $y + $bb[7]) ==> $x = -$bb[6] and $y = -$bb[7]
Вы можете попробовать это с помощью этого кода. Поместите его в файл с именем img.php
и перейдите к img.php?q=Hello
для проверки:
<?php
header("Content-type: image/png");
$q = $_REQUEST['q'];
$font = "Impact.ttf";
$size = 30;
$bbox = imageftbbox($size, 0, $font, $q);
$width = $bbox[2] - $bbox[6];
$height = $bbox[3] - $bbox[7];
$im = imagecreatetruecolor($width, $height);
$green = imagecolorallocate($im, 60, 240, 60);
imagefttext($im, $size, 0, -$bbox[6], -$bbox[7], $green, $font, $q);
imagepng($im);
imagedestroy($im);
?>
Если вместо этого вы используете растровые шрифты, посмотрите на функции imagefontwidth
и imagefontheight
.