php imagick pixel iterator compare to next and previous pixels -
$imagick = new \imagick(realpath($imagepath)); $imageiterator = $imagick->getpixeliterator(); foreach ($imageiterator $row => $pixels) { /* loop through pixel rows */ foreach ($pixels $column => $pixel) { if ($column % 2) {
how compare pixel 1 above , below , 1 left , right, using issimilar understand
getnextiteratorrow/getpreviousiteratorrow maybe? similar pixels?
} } $imageiterator->synciterator(); }
that question how navigate current pixel 1 above, below, left , right.
assistance appreciated.
this 1 of problems best solved writing code.
function processpixel($pixeleft, $pixelmiddle, $pixelright, $pixelabove, $rowbelow) { //whatever you're doing. } function processrow($rowabove, $rowmiddle, $rowbelow) { ($x = 0; $x < count($pixels); $x++) { $pixelabove = null; $pixelbelow = null; $pixeleft = null; $pixelright = null; $pixelmiddle = $pixels[0]; if (($x - 1) >= 0) { $pixelleft = $pixels[$x - 1]; } if (($x + 1) < count($pixels)) { $pixelright = $pixels[$x + 1]; } if ($rowabove != null) { $pixelabove = $rowabove[$x]; } if ($rowbelow != null) { $rowbelow = $rowbelow[$x]; } processpixel($pixeleft, $pixelmiddle, $pixelright, $pixelabove, $rowbelow) } } function processimageiterator($imageiterator) { $rowabove = null; $rowmiddle = null; $rowbelow = null; foreach ($imageiterator $rowpixels) { $rowbelow = $rowpixels; foreach ($imageiterator $rowpixels) { processrow($rowabove, $rowmiddle, $rowbelow); } $rowabove = $rowmiddle; $rowmiddle = $rowbelow; } // finish last row middle on last row processrow($rowabove, $rowmiddle, null); //finish row of pixel below last row. may not necessary //depending on algorithm, $rowabove = $rowmiddle; processrow($rowabove, null, null); }
just note, highly non-performant, aka slow heck. may (but not guaranteed) faster implement whatever you're trying fx operator. example here , full documentation here.
Comments
Post a Comment