如何在PHP中检查像素模式?
我的意思是我想使用像素A具有xxx值并且后面的像素B具有另一个值yyy的条件。
这就是我写的:
$img = imagecreatefrompng("myimage.png");
$w = imagesx($img);
$h = imagesy($img);
for($y=0;$y<$h;$y++) {
for($x=0;$x<$w;$x++) {
$rgb = imagecolorat($img, $x, $y);
$r = ($rgb >> 16) & 0xFF;
$g = ($rgb >> 8) & 0xFF;
$b = $rgb & 0xFF;
echo "#".$r.$g.$b.",";
$pixel = $r.$g.$b;
if ($pixel == "481023" and $pixel+1???
}
echo "<br />\r\n";
}
我还想问一下,如果我可以通过每周期将$ x值增加2来加速整个事情。这是因为我有一个2像素的模式,也许我可以使用类似的东西:
for($x=0;$x<$w;$x+2) {
//...
if ($pixel == "xxx") {//check the following pixel}
else if ($pixel == "yyy") {//check the previous pixel}
}
答案 0 :(得分:0)
您可能想要定义一个类似的函数:
function getpixelat($img,$x,$y) {
$rgb = imagecolorat($img,$x,$y);
$r = dechex(($rgb >> 16) & 0xFF);
$g = dechex(($rgb >> 8) & 0xFF);
$b = dechex($rgb & 0xFF);
return $r.$g.$b;
}
请注意dechex
- 如果您希望它看起来像HTML颜色代码,则需要此功能。否则“白色”将是255255255
而不是ffffff
,你也会得到含糊不清的颜色 - 202020
是深灰色(20,20,20)或“带有轻微提示的红色”蓝色“(202,0,20)?
一旦你拥有了它,它应该是一件简单的事情:
for( $y=0; $y<$h; $y++) {
for( $x=0; $x<$w; $x++) {
$pixel = getpixelat($img,$x,$y);
if( $pixel == "481023" && getpixelat($img,$x+1,$y) == "998877") {
// pattern! Do something here.
$x++; // increment X so we don't bother checking the next pixel again.
}
}
}