PHP imagettftext,中心动态文本

时间:2014-06-11 11:22:21

标签: php image

我正在开发一个脚本,用随机生成的图像和随机背景颜色将推文发布到推特上。这是完美的工作,但我想在图像的中心显示rgb颜色,但它不能正常工作。这是我的代码:

$rgbColor = array(rand(0,255),rand(0,255),rand(0,255));
$image = imagecreatetruecolor(600, 200);
$color = imagecolorallocate($image, $rgbColor[0], $rgbColor[1], $rgbColor[2]);
$white = imagecolorallocate($image, 255, 255, 255);
$black = imagecolorallocate($image, 0, 0, 0);
imagefill($image, 0, 0, $color);
imagettftext($image, 20, 0,(300-(strlen('rgb('.$rgbColor[0].', '.$rgbColor[1].', '.$rgbColor[2].')')*20)/2), 75, (brghtdiff($rgbColor[0], $rgbColor[1], $rgbColor[2]) > 125 ? $black : $white), './Station.ttf', 'rgb('.$rgbColor[0].', '.$rgbColor[1].', '.$rgbColor[2].')');
imagejpeg($image, './image.jpg');
imagedestroy($image);

创建:

preview

好吧,它显示rgb(int,int,int)不在中心,是否有人知道文本在中心的位置?

2 个答案:

答案 0 :(得分:0)

您需要知道文本与array imagettfbbox ( float $size , float $angle , string $fontfile , string $text )

的大小

在你的情况下:

$imBBox = imagettfbbox(20, 0, './Station.ttf',$text,'rgb('.$rgbColor[0].', '.$rgbColor[1].', '.$rgbColor[2].')');

获得文本的边界框后,您可以计算图像中的正确位置,使其居中。

答案 1 :(得分:0)

您正在尝试根据文本的长度乘以20确定文本的宽度。此方法不正确,因为并非字符串中的所有字符都具有20像素的宽度。

您应该使用imagettfbbox()函数,该函数将返回包含文本边界框角点坐标的数组。根据其结果,您可以计算文本的实际宽度并正确定位。

$bbox = imagettfbbox(20, 0, './Station.ttf', 'rgb('.$rgbColor[0].', '.$rgbColor[1].', '.$rgbColor[2].')');

$x = 300 - ($bbox[4] / 2);

imagettftext($image, 20, 0, $x, 75, (brghtdiff($rgbColor[0], $rgbColor[1], $rgbColor[2]) > 125 ? $black : $white), './Station.ttf', 'rgb('.$rgbColor[0].', '.$rgbColor[1].', '.$rgbColor[2].')');