Создать белую коробку вокруг текста GD-Lib - PullRequest
0 голосов
/ 18 ноября 2011

Я хочу добавить белое поле вокруг текста, который я добавляю к изображению через GD-Lib. но я не знаю, как это сделать лучше всего.

Вот мой текущий код:

    <?php
    $textImg = imagecreatefromjpeg($tempImage);
    $black = imagecolorallocate($textImg, 0, 0, 0);

    $font = 'lib/verdana.ttf';

    // Add the text
    imagettftext($textImg, 20, 0, imagesx($textImg)*$textData['x']/100, imagesy($textImg)*$textData['y']/100, $black, $font, $textData['text']);

    imagejpeg($textImg,$tempImage,$jpegQuality);
    ?>

Надеюсь, вы мне поможете.

1 Ответ

1 голос
/ 18 ноября 2011

Вы можете использовать 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);
...