我编写了一个代码,用于从图像中选择具有特定颜色的所有像素,并将它们设置为空白图像。但是在一定数量的像素下,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>";
}
?>
答案 0 :(得分:2)
您正在填写图片的颜色表。
每次绘制像素时都会分配一种新颜色,即使它们的颜色都相同。
所以这样做:
$color = imagecolorallocate($img, $_POST["r1"], $_POST["g1"], $_POST["b1"]);
当您绘制像素时,请重复使用$color
。