2011-08-15 42 views
2


我寫的拾取所有的像素,從圖像的特定顏色,將它們放置在空白圖像的編碼。但是在一定數量的像素下,imagesetpixel()停止。

有人能告訴我爲什麼嗎?PHP imagesetpixel限制

<?php 
if(isset($_POST["submit"])){ 
header("Content-Type: image/png"); 
$img = imagecreate(200, 100); 
imagecolorallocate($img, 0, 0, 0); 
$im = imagecreatefrompng("img.png"); 
$x = imagesx($im); 
$y = imagesy($im); 
for($i=0; $i<$x; $i++){ 
    for($j=0; $j<$y; $j++){ 
    $rgb = imagecolorsforindex($im, imagecolorat($im, $i, $j)); 
    if($rgb["red"]==$_POST["r1"] && $rgb["green"]==$_POST["g1"] && $rgb["blue"]==$_POST["b1"]){ 
     $s .= "$i,$j "; 
     imagesetpixel($img, $i, $j, imagecolorallocate($img, $_POST["r1"], $_POST["g1"], $_POST["b1"])); 
    } 
    elseif($rgb["red"]==$_POST["r2"] && $rgb["green"]==$_POST["g2"] && $rgb["blue"]==$_POST["b2"]){ 
     $s2 .= "$i,$j "; 
     //imagesetpixel($img, $i, $j, imagecolorallocate($img, $_POST["r2"], $_POST["g2"], $_POST["b2"])); 
    } 
    } 
} 
imagepng($img); 
imagedestroy($img); 
//print $s."\n".$s2; 
} 
else{ 
    print "<center><br /><br /><br /><br /><br /><form method=\"post\" action=\"\">Color 1 : <input type=\"text\" name=\"r1\" size=\"3\" value=\"73\" /><input type=\"text\" name=\"g1\" size=\"3\" value=\"167\" /><input type=\"text\" name=\"b1\" size=\"3\" value=\"248\" /><br />Color 2 : <input type=\"text\" name=\"r2\" size=\"3\" value=\"229\" /><input type=\"text\" name=\"g2\" size=\"3\" value=\"180\" /><input type=\"text\" name=\"b2\" size=\"3\" value=\"253\" /><br /><input type=\"submit\" name=\"submit\" /></form></center>"; 
} 
?> 

img.png

回答

2

你填滿了圖像的顏色表。

您分配一個新的顏色,每次你畫一個像素,即使它們都是一樣的顏色。

所以做這個:

$color = imagecolorallocate($img, $_POST["r1"], $_POST["g1"], $_POST["b1"]); 

當你畫一個像素,重用$color