我正在开发一个脚本,用随机生成的图像和随机背景颜色将推文发布到推特上。这是完美的工作,但我想在图像的中心显示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);
创建:
好吧,它显示rgb(int,int,int)不在中心,是否有人知道文本在中心的位置?
答案 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].')');