Я хочу сделать изображение, которое просто шумит, может быть, что-то вроде этого:
(источник: loriswebs.com)
В идеале я бы хотел изменить цвет. Любые идеи о том, как создать это?
Я хочу сделать изображение, которое просто шумит, может быть, что-то вроде этого:
(источник: loriswebs.com)
В идеале я бы хотел изменить цвет. Любые идеи о том, как создать это?
Это довольно простой способ генерировать случайный шум. Вы можете сделать это довольно легко с некоторыми библиотеками изображений 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);
Генерирует это:
Однако пример изображения, который вы опубликовали, не выглядит абсолютно случайным цветовым шумом. Это больше похоже на произвольный выбор между одним из двух цветов, либо несколько серым пикселем, либо разноцветным пикселем. Вы могли бы сделать это примерно так:
//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);
Генерирует это:
Ваш пример кажется еще более сложным, так как пиксели кажутся появляющимися небольшими группами, чтобы создать более яркий вид. Вы могли бы эмулировать это путем настройки логики цикла, если хотите, или окрашивания небольших квадратов вместо отдельных пикселей.
Интересной особенностью такого типа генерации является то, что вы можете увидеть разбивку функции rand()
на платформах Windows, если вы используете ее вместо mt_rand()
. Заметные шаблоны могут развиваться в шуме из-за ограничений в этой комбинации функций/платформ.
Да, вам нужно использовать:
ImageCreate[True]Color()
for
петлиrand()
или mt_rand()
ImageColorAllocate()
ImageSetPixel
Звучит как рецепт, LOL. Дайте мне знать, если вам нужна дополнительная помощь.
Извините за краткость, нужно было что-то сделать, вот пример кода:
<?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);
?>