检查像素图案

时间:2012-02-16 16:26:51

标签: php

如何在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}
}

1 个答案:

答案 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.
       }
   }
}