在文本GD-Lib周围创建白盒

时间:2011-11-18 10:32:13

标签: php text background gd

我想在我通过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 个答案:

答案 0 :(得分:1)

您可以使用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);