如何使用PHP制作嘈杂的背景图像?

Ric*_*haw 10 php imagemagick

我想制作一个只是噪音的图像,可能是这样的:

alt text http://www.loriswebs.com/tutorials/images/tealtexture3.jpg

理想情况下,我也希望能够改变颜色.关于如何生成这个的任何想法?

zom*_*bat 13

生成随机噪声非常简单.您可以使用PHP的一些图像库(包括GD函数)轻松完成此任务.我相信它在ImageMagick中会有类似之处.

如果要生成完全随机的噪声,可以为每种颜色和每个像素使用随机值.GD可能看起来像这样:

//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);
Run Code Online (Sandbox Code Playgroud)

生成这个: 替代文字

但是,您发布的示例图像看起来不像完全随机的颜色噪声.它似乎更像是两种颜色中的一种之间的任意选择,要么是灰色的像素,要么是有点颜色的像素.你可以完成更多这样的事情:

//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);
Run Code Online (Sandbox Code Playgroud)

生成这个: 替代文字

你的例子看起来仍然有点复杂,像素似乎以小组形式出现,以产生更加凶悍的外观.如果需要,可以通过调整循环逻辑来模拟,或者将小方块着色而不是单个像素.

关于这类生成的一个有趣的事情是,rand()如果你使用它而不是在Windows平台上实际上可以看到函数的细分mt_rand(). 由于功能/平台组合的限制,可辨别的图案可能在噪声中产生.


Ali*_*xel 5

是的,您需要使用:

  • ImageCreate[True]Color()
  • 2个for循环
  • rand() 要么 mt_rand()
  • ImageColorAllocate()
  • ImageSetPixel

听起来像食谱,哈哈.如果您需要进一步的帮助,请告诉我.


对不起,简洁必须做点什么,这是一个示例代码:

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

?>
Run Code Online (Sandbox Code Playgroud)