2011-12-10 93 views
1

我目前正在編程一個背景圖像使用PHP的顏色漸變爲所有瀏覽器不支持CSS3。我有以下代碼:PHP圖像顏色漸變顯示不正確

<?php 
header("Content-Type: image/png"); 
$from=array("R"=>255, "G"=>255, "B"=>255); 
$to=array("R"=>170, "G"=>221, "B"=>255); 

$width=500; 
$height=1000; 
$image=imagecreate($width, $height); 
for($y=0; $y < $height; $y++) 
{ 
    imageline($image, 0, $y, $width, $y, imagecolorallocate($image, $from["R"]-(($from["R"]-$to["R"])/$height)*$y, $from["G"]-(($from["G"]-$to["G"])/$height)*$y, $from["B"]-(($from["B"]-$to["B"])/$height)*$y)); 
} 
imagepng($image); 
?> 

它似乎很簡單,但我真的不知道爲什麼圖像顯示不正確。如下圖所示,但梯度應該高1000px。 The gradient that is displayed

+0

陣列中沒有足夠的項目來跨越1000像素的高度。你需要擴展整個事物。你可以使用ImageMagick嗎?那裏會更容易些。 –

+0

但是爲什麼這個扮演什麼角色呢?使用表達式「(($ from [」R「] - $ to [」R「])/ $ height)」我計算顏色步長的大小。我的$ y是當前步驟的編號。在for循環的最後一個循環$ y將是$ height-1。假設我的for循環的條件是$ y <= $ height,那麼我可以取消$ y和$ height。 –

+0

我明白了,您已經考慮到了這一點。嗯,那麼這個邏輯肯定有一些缺陷......我現在不能發現它。也許嘗試調試R值並查看它「破壞」的位置。無論如何,漸變高度似乎爲255像素,我100%確定這與問題的根本原因有關。 –

回答

0

我可以解決這個問題。函數「imagecolorallocate」似乎只限於有限數量的調用。我用「imagecolorresolve」來代替,它工作正常。另一種選擇是使用「imagecreatetruecolor」來創建圖像。然後你可以使用「imagecolorallocate」。