Nasıl PHP kullanarak gürültülü bir arka plan resmi yapabilirsiniz?

2 Cevap php

Ben sadece gürültü, bunun gibi belki bir şey bir resim yapmak için arıyorum:

alt text

İdeal Ben de rengini değiştirmek mümkün olmak istiyorum. Bu oluşturmak için nasıl herhangi bir fikir?

2 Cevap

Bu rastgele gürültü oluşturmak oldukça basittir. Sen GD functions gibi PHP'nin görüntü kütüphaneleri bazı oldukça kolayca gerçekleştirebilirsiniz. Ben Imagemagick benzer olurdu eminim.

Tamamen rastgele gürültü oluşturmak istiyorsa, her renk ve her piksel için rastgele değerler kullanabilirsiniz. İşte GD ile bu gibi görünebilir:

//random colored noise
$x = 150;
$y = 150;
$im = imagecreatetruecolor($x,$y);
for($i = 0; $i < $x; $i++) {
    for($j = 0; $j < $y; $j++) {
        $color = imagecolorallocate($im, rand(0,255), rand(0,255), rand(0,255));
        imagesetpixel($im, $i, $j, $color);
    }
}    
header('Content-Type: image/png');
imagepng($im);

alt text: Bu üretir

Ancak, açıkça haberi örnek görüntü tamamen rastgele renk gürültü gibi görünmüyor. Daha iki renk biri arasında keyfi bir seçim, ya biraz gri piksel ya da biraz renkli piksel gibi görünüyor. Daha bunun gibi başarmak olabilir:

//two-color random noise
$x = 150;
$y = 150;
$im = imagecreatetruecolor($x,$y);
$color1 = imagecolorallocate($im, 200, 240, 242);
$color2 = imagecolorallocate($im,220,220,220);
imagefill($im,0,0,$color1);
for($i = 0; $i < $x; $i++) {
    for($j = 0; $j < $y; $j++) {
        if (mt_rand(0,1) == 1) imagesetpixel($im, $i, $j, $color2);
    }
}
header('Content-Type: image/png');
imagepng($im);

alt text: Bu üretir

Sizin örnek blockier görünüm üretmek için küçük gruplar halinde görünmesini görünen piksel ile, daha karmaşık bir bit hala görünüyor. Eğer isteseydi döngü mantığı ayarlayarak, ya da küçük kareler yerine bireysel piksel renklendirme tarafından bu taklit olabilir.

Nesil bu tür hakkında ilginç bir şey yerine mt_rand() bunu kullanabilirsiniz eğer gerçekten Windows platformları üzerinde rand() fonksiyonunun dökümünü görebilirsiniz olmasıdır. Discernible patterns can develop nedeniyle bu işlev / platform kombinasyonu sınırlamaları gürültü.

Evet, kullanmanız gerekir:

  • ImageCreate[True]Color()
  • 2 x for döngüler
  • rand() veya mt_rand()
  • ImageColorAllocate()
  • ImageSetPixel

Lol, bir reçete gibi geliyor. Daha fazla yardıma ihtiyacınız varsa bana bildirin.


Kısalık bir şey yapmak zorunda için üzgünüm, burada bir örnek kod:

<?php

$im = ImageCreateTrueColor(200, 300);

if (is_resource($im)) {
    $blue = array_map('hexdec', str_split('0000FF', 2));
    $white = array_map('hexdec', str_split('FFFFFF', 2));

    $blue = ImageColorAllocate($im, $blue[0], $blue[1], $blue[2]);
    $white = ImageColorAllocate($im, $white[0], $white[1], $white[2]);

    for ($w = 1; $w <= 200; $w++) {
        for ($h = 1; $h <= 300; $h++) {
            if (mt_rand(1, 100) >= 50)
                ImageSetPixel($im, $w, $h, $blue);
            else
                ImageSetPixel($im, $w, $h, $white);
        }
    }
}

header('Content-type: image/png');

ImagePNG($im, null, 9);
ImageDestroy($im);

?>