2011-11-18 78 views
0

我想添加一个白色的框,围绕通过GD-Lib添加到图片的一些文本。 但我不知道如何做到最好。围绕文本创建白框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

您可以使用imagettfbbox()通过传递用于文本本身的相同设置(相同的文本,字体和大小等)来获取边界框的坐标。

一旦你有了这些坐标,你就可以使用imagerectangle()在文本周围绘制边框,或者你可以使用imagefilledrectangle()绘制一个实心的矩形。一定要叫什么你渲染imagettftext()

一个基本的例子是下面的文字前,但需要一些调整的大部分是来自内存和I怀疑$x$y计算可以做的更好,因为它可能没有按” t可以像现在一样使用不同的画布尺寸。但是,它表明了原则。

// 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);