我想在我通过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);
?>
我希望你能帮助我。
答案 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);