2012-03-10 21 views
5

私は与えられたサイズの完全にランダムなイメージを生成しようとしています。完全にランダムな画像を生成する方法は?

<?php 
$Width = 64; 
$Height = 32; 

$Image = imagecreate($Width, $Height); 
for($Row = 1; $Row <= $Height; $Row++) { 
    for($Column = 1; $Column <= $Width; $Column++) { 
     $Red = mt_rand(0,255); 
     $Green = mt_rand(0,255); 
     $Blue = mt_rand(0,255); 
     $Colour = imagecolorallocate ($Image, $Red , $Green, $Blue); 
     imagesetpixel($Image,$Column - 1 , $Row - 1, $Colour); 
    } 
} 

header('Content-type: image/png'); 
imagepng($Image); 
?> 

問題は、4行の後に、それがランダムであることを停止していることであり、あなたがにimagecreateを変更した場合、この
Sample of problem

+3

塗りつぶし矩形の代わりに 'imagesetpixel()'を使用してください。単一のピクセルを設定するオーバーヘッドは、1x1の長方形よりもはるかに少ないオーバーヘッドです。 –

+0

@MarcBこのチップをお寄せいただきありがとうございますが、それでも同じ問題が発生しました – Gricey

+1

imagecreateTRUECOLOR()を使用していないため、8ビットイメージの制限である4x64 = 256はすべて可能です。 –

答えて

5

のようなソリッド色で塗りつぶし:ここ

は、私がこれまで持っているものです(それ以外のものはすべてパラメータを含めて同じです)

+0

ああ、決してそれを推測したことはありません。完全に動作します、ありがとう – Gricey

1

各ピクセルに新しい色を割り当てることで、色の味がすぐに使い果たされます。 1行あたり64ピクセルの4行は256です。口蓋がいっぱいになると、新しい色はすべて口蓋の最後の色を使用します。

Mishuの回答は、より多くの色を割り当てることができるため、フルカラーの画像ではなく、インデックス付きのカラー画像を使用しています。

http://us.php.net/manual/en/function.imagecolorallocate.php#94785

0

の両方が異なるpalletesで画像を作成するPHPのドキュメントにこの回答を参照してください。トゥルーカラーはより多くのカラーレンジを持ちますので、imagecreatetruecolor()を使用することをお勧めします

関連する問題