imagestring — получает размер строки в пикселях

Привет,
Сразу хочу отметить, что это не дубликат.
Я уже видел подобные посты, но все они используют определенный шрифт, который не тот случай.
Я использую шрифт по умолчанию номер 3 (для этого примера), и я хочу иметь возможность рассчитать размер вывода и поместить его в точный центр моего $ canvas

imagestring($canvas,3,imagesx($canvas),imagesy($canvas),$myString,imagecolorallocate($canvas,239,13,177));

Я знаю, как сделать вычисление, чтобы поместить его в центр, это довольно легко, единственный пропущенный параметр — это точный размер в пикселях (x / y) моей строки, учитывая шрифт № 3.
пикселей (х / у) моей строки, учитывая шрифт № 3.

-2

Решение

Обновленный ответ без использования определенного шрифта. Встроенные шрифты PHP действительно моноширинные (протестировано и работает):

$font           = 3;
$img            = imagecreatetruecolor(500, 500);
$text           = "Waldson Patricio";
$color          = imagecolorallocate($img, 255, 255, 255);
$size           = strlen($text);

$tw             = $size * imagefontwidth($font);
$th             = imagefontheight($font);imagestring($img, $font, (imagesx($img) - $tw) / 2 , (imagesy($img) - $th) / 2, $text, $color);
header('Content-type:image/jpeg');
imagejpeg($img);
4

Другие решения

imagettfbbox а также imagettftext сделаем работу:

//setup
$font     = '<path to font>';
$string   = 'My String';
$fontSize = 12;

//getting width and height
$bBox   = imagettfbbox($fontSize, 0, $font, $string);
$width  = $bBox[2] - $bBox[0];
$height = $bBox[1] - $bBox[7];

//drawing in the center
imagettftext($canvas, $fontSize, 0, (imagesx($canvas) - $width)/2, (imagesy($canvas) - $height)/2, $color, $font, $string);
3

После некоторых исследований я не могу обнаружить, что шрифты, используемые в строке изображения, имеют стандартную ширину или интервал. В моей реализации PHP, кажется, что шрифт 3 имеет символы 6 на 9 пикселей с интервалом в 1 пиксель, одинарный, поэтому 7 * strlen должен давать довольно точную ширину, а 9 — высоту (я предполагаю, что вы работаете только с центрированием линия) строкового изображения. Однако это может зависеть от платформы или реализации, поэтому, если это не сработает, вам придется измерить себя.

Это решение, если вы должны использовать imagestring (), конечно — использование imagettftext () и imagettfbbox () было бы намного лучше для точного измерения, как предложил Уолдсон.

0
По вопросам рекламы [email protected]