2012-03-10 34 views
5

Tôi đang cố gắng tạo ra một hình ảnh hoàn toàn ngẫu nhiên có kích thước nhất định.Làm thế nào để tạo ra một hình ảnh hoàn toàn ngẫu nhiên?

Dưới đây là những gì tôi có cho đến nay:

<?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); 
?> 

Vấn đề là sau khi 4 hàng nó dừng lại là ngẫu nhiên và lấp đầy bằng màu như thế này
Sample of problem

+3

Sử dụng 'imagesetpixel()' thay vì hình chữ nhật được tô đầy. chi phí thấp hơn nhiều để thiết lập một pixel đơn lẻ hơn là làm hình chữ nhật 1x1. –

+0

@MarcB Cảm ơn mẹo đó, đã làm cho nó nhanh hơn nhưng nó vẫn gặp vấn đề tương tự – Gricey

+1

4x64 = 256, là giới hạn cho hình ảnh 8 bit (vì bạn không sử dụng imagecreateTRUECOLOR()) là tất cả những gì bạn có thể có. –

Trả lời

5

nếu bạn thay đổi imagecreate để imagecreatetruecolor nó sẽ hoạt động (mọi thứ khác giống nhau, bao gồm các tham số)

+0

Huh, không bao giờ có thể đoán được điều đó. Hoạt động hoàn hảo, cảm ơn – Gricey

1

Bằng cách phân bổ màu mới cho mỗi pixel, bạn sẽ nhanh chóng cạn kiệt khẩu vị màu. 4 hàng ở 64 pixel mỗi hàng là 256. Sau khi vòm miệng đầy, bất kỳ màu nào mới sẽ sử dụng màu cuối cùng trên vòm miệng.

Câu trả lời của Mishu sử dụng hình ảnh đầy đủ màu sắc, thay vì và lập chỉ mục hình ảnh màu, đó là lý do tại sao bạn có thể phân bổ nhiều màu hơn.

Xem câu trả lời này trong tài liệu PHP http://us.php.net/manual/en/function.imagecolorallocate.php#94785

0

Cả hai tạo ra hình ảnh với palletes khác nhau. Màu đích thực có nhiều dải màu hơn vì vậy tốt hơn nên sử dụng imagecreatetruecolor()

Các vấn đề liên quan