Вы можете использовать imagettfbbox () , чтобы получить координаты ограничительной рамки, передав те же настройки, которые вы используете для самого текста (тот же текст, шрифт и размер и т. Д.).
Получив эти координаты, вы можете использовать imagerectangle () , чтобы нарисовать границу вокруг текста, или вы можете использовать imagefilledrectangle () , чтобы нарисовать сплошной прямоугольник. Обязательно назовите его, прежде чем визуализировать текст с imagettftext()
Ниже приведен базовый пример, но потребуется некоторая настройка, так как большая его часть - из памяти, и я подозреваю, что вычисления $x
и $y
могут быть выполнены лучше, поскольку, вероятно, они не работают с изменяющимися размерами холста, поскольку сейчас. Тем не менее, он демонстрирует принцип.
// Set the content-type
header('Content-Type: image/png');
// Create the image
$im = imagecreatetruecolor(400, 30);
// Create some colors
$white = imagecolorallocate($im, 255, 255, 255);
$black = imagecolorallocate($im, 0, 0, 0);
imagefilledrectangle($im, 0, 0, 399, 29, $black);
// The text to draw
$text = 'Testing';
// Replace path by your own font path
$font = 'verdana.ttf';
// Add the text
$bbox = imagettfbbox(20, 0, $font, $text);
$x = $bbox[1] + (imagesx($im) / 2) - ($bbox[4]);
$y = $bbox[3] + (imagesy($im) / 2) - ($bbox[5]);
imagerectangle($im, 0, 0, $x, $y, $white);
imagettftext($im, 20, 0, 0, 20, $white, $font, $text);
// Using imagepng() results in clearer text compared with imagejpeg()
imagejpeg($im);
imagedestroy($im);