2014-06-11 89 views
0

我正在處理一個腳本,該腳本使用隨機生成的隨機背景顏色圖像向Twitter發佈推文。這工作完美,但我想在圖像的中心顯示RGB顏色,但它不正常工作。這是我的代碼:PHP imagettftext,中心動態文本

$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)不是在市中心,沒有人知道如何在文本文檔是中心?

+0

brghtdiff()是你自己的函數嗎?請給我們看。 –

+0

該函數用於計算互聯網上建立的2個rgb值之間的差異。但我已經改變了一點。現在它只顯示一種顏色的亮度;函數brghtdiff($ r,$ g,$ b){ return(299 * $ r + 587 * $ g + 114 * $ b)/ 1000; } – DazDylz

回答

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].')'); 
+0

謝謝! Werid,我搜索了這個函數,但我不知道它可以給出返回值的實際寬度。謝謝! – DazDylz