【发布时间】:2010-04-28 07:14:05
【问题描述】:
【问题讨论】:
标签: php imagemagick
【问题讨论】:
标签: php imagemagick
生成随机噪声相当简单。您可以使用一些 PHP 的图像库(包括 GD functions)轻松完成此操作。我相信在 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);
生成这个:
但是,您发布的示例图片显然不像完全随机的颜色噪点。它看起来更像是在两种颜色之一之间的任意选择,要么是有点灰色的像素,要么是有点颜色的像素。你可以像这样完成它:
//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);
生成这个:
您的示例似乎仍然有点复杂,像素似乎以小组形式出现以产生更块状的外观。如果需要,您可以通过调整循环逻辑或为小方块着色而不是单个像素来模拟这一点。
关于这种生成的一个有趣的事情是,如果你使用它而不是 mt_rand(),你实际上可以在 Windows 平台上看到 rand() 函数的故障。 Discernible patterns can develop 由于该功能/平台组合的限制而引起的噪音。
【讨论】:
是的,你需要使用:
ImageCreate[True]Color()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);
?>
【讨论】:
ImageFill()的原因。我将保持代码不变,但很好的指针,+1!