我期待,使這只是噪音,也許是這樣的圖像:如何使用PHP製作嘈雜的背景圖像?
alt text http://www.loriswebs.com/tutorials/images/tealtexture3.jpg
理想情況下,我想能夠改變顏色爲好。任何想法如何產生這個?
我期待,使這只是噪音,也許是這樣的圖像:如何使用PHP製作嘈雜的背景圖像?
alt text http://www.loriswebs.com/tutorials/images/tealtexture3.jpg
理想情況下,我想能夠改變顏色爲好。任何想法如何產生這個?
這是相當簡單的,生成隨機噪聲。您可以使用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);
生成此:
你的例子似乎有點更復雜的是,有似乎出現在小團體產生blockier外觀的像素。你可以通過調整循環邏輯來模擬,如果你想要的,或着色小方塊,而不是單個像素。
這種類型的一代有趣的事情是,如果使用它而不是mt_rand()
,您實際上可以在Windows平臺上看到rand()
函數的細分。由於該功能/平臺組合中的限制,在噪音中產生噪音。
是的,你需要使用:
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);
?>
好,但座標從0開始,is_resource應該測試$ im,再加上它可能會更簡單一些,例如使用ImageColorAllocate($ im,0x00,0x00,0xFF)。 我知道你很快就輸入了,我發表我的言論以避免給OP或其他經驗不足的讀者帶來麻煩。 備註:可以通過將50更改爲另一個值來更改藍/白比。 最後的評論:通過使用ImageFill或類似的循環之前,它會減少一半ImageSetPixel調用,這可能會提供一些加速。 – PhiLho 2010-04-28 07:52:17
@PhiLho:我懷疑座標是從0還是1開始,這也是我選擇不使用ImageFill()的原因。儘管如此,我仍然保留代碼不變但很棒,+1! – 2010-04-28 11:12:54