2011-12-10 14 views
1

現在、CSS3をサポートしていないすべてのブラウザで、色勾配を使用してPHPを使用して背景画像をプログラミングしています。とても簡単なことのようですが、画像が正しく表示されない理由を私は本当に知らない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 "] - $〜[" R "])/ $ height)"という式を使用すると、 "カラーステップサイズのサイズが計算されます。 My $ yは現在のステップの番号です。 for-loop $ yの最後の繰り返しでは、$ height-1になります。私のfor-loopの条件が$ y <= $ heightの場合、$ yと$ heightを取り消すことができます。 –

+0

私はあなたがすでにそれを考慮に入れているのを見ます。うーん、その論理には何らかの欠陥があるはずだ...今はそれを見つけることができない。多分、R値をデバッグして、どこが "壊れている"のか見てみてください。グラデーションは、どんなレートでも、255ピクセルの高さに見えますが、私は問題の根本原因と関係があると100%確信しています。 –

答えて

0

私はこの問題を解決できました。関数 "imagecolorallocate"は限られた数の呼び出しに制限されているようです。私は代わりに "imagecolorresolve"を使用し、正常に動作します。別のオプションは、画像を作成するために "imagecreatetruecolor"を使用することです。次に、 "imagecolorallocate"を使用することができます。

関連する問題