/** * @param \Imagick $imagick * @param int $graphWidth * @param int $graphHeight */ public static function analyzeImage(\Imagick $imagick, $graphWidth = 255, $graphHeight = 127) { $sampleHeight = 20; $border = 2; $imagick->transposeImage(); $imagick->scaleImage($graphWidth, $sampleHeight); $imageIterator = new \ImagickPixelIterator($imagick); $luminosityArray = []; foreach ($imageIterator as $row => $pixels) { /* Loop through pixel rows */ foreach ($pixels as $column => $pixel) { /* Loop through the pixels in the row (columns) */ /** @var $pixel \ImagickPixel */ if (false) { $color = $pixel->getColor(); $luminosityArray[] = $color['r']; } else { $hsl = $pixel->getHSL(); $luminosityArray[] = $hsl['luminosity']; } } /* Sync the iterator, this is important to do on each iteration */ $imageIterator->syncIterator(); break; } $draw = new \ImagickDraw(); $strokeColor = new \ImagickPixel('red'); $fillColor = new \ImagickPixel('red'); $draw->setStrokeColor($strokeColor); $draw->setFillColor($fillColor); $draw->setStrokeWidth(0); $draw->setFontSize(72); $draw->setStrokeAntiAlias(true); $previous = false; $x = 0; foreach ($luminosityArray as $luminosity) { $pos = $graphHeight - 1 - $luminosity * ($graphHeight - 1); if ($previous !== false) { /** @var $previous int */ //printf ( "%d, %d, %d, %d <br/>\n" , $x - 1, $previous, $x, $pos); $draw->line($x - 1, $previous, $x, $pos); } $x += 1; $previous = $pos; } $plot = new \Imagick(); $plot->newImage($graphWidth, $graphHeight, 'white'); $plot->drawImage($draw); $outputImage = new \Imagick(); $outputImage->newImage($graphWidth, $graphHeight + $sampleHeight, 'white'); $outputImage->compositeimage($plot, \Imagick::COMPOSITE_ATOP, 0, 0); $outputImage->compositeimage($imagick, \Imagick::COMPOSITE_ATOP, 0, $graphHeight); $outputImage->borderimage('black', $border, $border); $outputImage->setImageFormat("png"); App::cachingHeader("Content-Type: image/png"); echo $outputImage; }
function fxAnalyzeImage(\Imagick $imagick) { $graphWidth = $imagick->getImageWidth(); $sampleHeight = 20; $graphHeight = 128; $border = 2; $imageIterator = new \ImagickPixelIterator($imagick); $reds = []; foreach ($imageIterator as $pixels) { /* Loop through pixel rows */ foreach ($pixels as $pixel) { /* Loop through the pixels in the row (columns) */ /** @var $pixel \ImagickPixel */ $color = $pixel->getColor(); $reds[] = $color['r']; } $imageIterator->syncIterator(); /* Sync the iterator, this is important to do on each iteration */ } $draw = new \ImagickDraw(); $strokeColor = new \ImagickPixel('red'); $fillColor = new \ImagickPixel('none'); $draw->setStrokeColor($strokeColor); $draw->setFillColor($fillColor); $draw->setStrokeWidth(1); $draw->setFontSize(72); $draw->setStrokeAntiAlias(true); $x = 0; $points = []; foreach ($reds as $red) { $pos = $graphHeight - $red * $graphHeight / 256; $points[] = ['x' => $x, 'y' => $pos]; $x += 1; } $draw->polyline($points); $plot = new \Imagick(); $plot->newImage($graphWidth, $graphHeight, 'white'); $plot->drawImage($draw); $outputImage = new \Imagick(); $outputImage->newImage($graphWidth, $graphHeight + $sampleHeight, 'white'); $outputImage->compositeimage($plot, \Imagick::COMPOSITE_ATOP, 0, 0); $imagick->resizeimage($imagick->getImageWidth(), $sampleHeight, \Imagick::FILTER_LANCZOS, 1); $outputImage->compositeimage($imagick, \Imagick::COMPOSITE_ATOP, 0, $graphHeight); $outputImage->borderimage('black', $border, $border); $outputImage->setImageFormat("png"); header("Content-Type: image/png"); echo $outputImage; }
function construct($imagePath) { $imagick = new \Imagick(realpath($imagePath)); $imageIterator = new \ImagickPixelIterator($imagick); /* Loop through pixel rows */ foreach ($imageIterator as $pixels) { /* Loop through the pixels in the row (columns) */ foreach ($pixels as $column => $pixel) { /** @var $pixel \ImagickPixel */ if ($column % 2) { /* Paint every second pixel black*/ $pixel->setColor("rgba(0, 0, 0, 0)"); } } /* Sync the iterator, this is important to do on each iteration */ $imageIterator->syncIterator(); } header("Content-Type: image/jpg"); echo $imagick; }
function weight($imageRegion) { // Outros efectos para mellorar $imageRegion->negateImage(true); $imageRegion->fxImage('intensity'); // Contar pixels $it = new \ImagickPixelIterator($imageRegion); $whitePixel = new \ImagickPixel('#000'); $totalPixels = 0; $dirtyPixels = 0; foreach ($it as $pixels) { foreach ($pixels as $column => $pixel) { if (!$pixel->isSimilar($whitePixel, 0.1)) { $dirtyPixels++; } $totalPixels++; } $it->syncIterator(); } return $dirtyPixels * 100 / $totalPixels; }
<?php $magick = new Imagick('magick:rose'); $iterator = new ImagickPixelIterator($magick); try { $dummy = new ImagickPixelIterator(new ImagickPixel()); } catch (Exception $ex) { echo "__construct\n"; } try { $iterator->setIteratorRow(-1); } catch (Exception $ex) { echo "setIteratorRow\n"; } ?> ==DONE==
function row_dump($row, $pixels) { printf("[%d] ", $row); if ($pixels === null) { var_dump($pixels); } else { printf("(%d)", count($pixels)); foreach ($pixels as $pixel) { $color = $pixel->getColor(false); printf(" #%02x%02x%02x", $color['r'], $color['g'], $color['b']); } printf("\n"); } } $magick = new Imagick(__DIR__ . '/facebook.png'); $iterators = array(ImagickPixelIterator::getPixelIterator($magick), ImagickPixelIterator::getPixelRegionIterator($magick, 40, 30, 20, 10)); foreach ($iterators as $iterator) { for ($i = 0; $i < 5; ++$i) { echo "== {$i} ==\n"; row_dump($iterator->getIteratorRow(), $iterator->getCurrentIteratorRow()); row_dump($iterator->getIteratorRow(), $iterator->getPreviousIteratorRow()); row_dump($iterator->getIteratorRow(), $iterator->getNextIteratorRow()); row_dump($iterator->getIteratorRow(), $iterator->getNextIteratorRow()); switch ($i) { case 0: $iterator->setIteratorRow(5); break; case 1: $iterator->setIteratorFirstRow(); break; case 2:
$canvas->newImage(640, 480, 'white'); draw_pie($canvas, 200, 200, 100, 0, 45, 'red'); draw_pie($canvas, 200, 200, 100, 45, 125, 'green'); draw_pie($canvas, 200, 200, 100, 125, 225, 'blue'); draw_pie($canvas, 200, 200, 100, 225, 300, 'cyan'); draw_pie($canvas, 200, 200, 100, 300, 360, 'orange'); test_shape($canvas); test_path($canvas); test_composite($canvas); test_annotation($canvas); // $actual_file = __DIR__.'/draw_example.out.png'; $expected_file = __DIR__ . '/draw_example.png'; // $canvas->writeImage($actual_file); $bg = new ImagickPixel('white'); $actual_iterator = new ImagickPixelIterator($canvas); $expected_iterator = new ImagickPixelIterator(new Imagick($expected_file)); list($total, $same, $similar, $diff) = array(0, 0, 0, 0); $actual_iterator->rewind(); $expected_iterator->rewind(); while ($actual_iterator->valid() && $expected_iterator->valid()) { if ($expected_iterator->key() !== $expected_iterator->key()) { var_dump(array('actual' => $expected_iterator->key(), 'expected' => $expected_iterator->key())); } $actual_pixels = $actual_iterator->current(); $expected_pixels = $expected_iterator->current(); foreach (array_map(null, $actual_pixels, $expected_pixels) as $value) { list($actual, $expected) = $value; if ($actual->isPixelSimilar($bg, 0.01) && $expected->isPixelSimilar($bg, 0.01)) { continue; } ++$total;
private function weight($imageRegion) { // Outros efectos para mellorar //$imageRegion->negateImage(true); //$imageRegion->fxImage('intensity'); //$imageRegion->contrastImage(1); $imageRegion->whiteThresholdImage('#EEE'); $imageRegion->blackThresholdImage('#EEE'); /*$basename = $this->basedir . '/%02d.png'; $imageRegion->writeImage( sprintf($basename, $this->i++) );*/ // Contar pixels $it = new \ImagickPixelIterator($imageRegion); //$whitePixel = new \ImagickPixel('#000'); $whitePixel = new \ImagickPixel('#FFF'); $totalPixels = 0; $dirtyPixels = 0; foreach ($it as $pixels) { foreach ($pixels as $column => $pixel) { if (!$pixel->isSimilar($whitePixel, 0.1)) { $dirtyPixels++; } $totalPixels++; } $it->syncIterator(); } $percent = $dirtyPixels * 100 / $totalPixels; //dump($percent); $this->logger->warning('%: ' . $percent); return $percent; }
<?php $im = new Imagick(); $im->clear(); $im->destroy(); $im = new ImagickDraw(); $im->clear(); $im->destroy(); $im = new ImagickPixel(); $im->clear(); $im->destroy(); $magick = new Imagick('magick:rose'); $im = new ImagickPixelIterator($magick); $im->clear(); $im->destroy(); echo 'success';
<?php function count_rows($pix) { $rows = 0; foreach ($pix as $r) { $rows++; } return $rows; } function count_objects($pix) { $objects = 0; foreach ($pix as $r) { foreach ($r as $o) { $objects++; } } return $objects; } $im = new Imagick('magick:rose'); $it1 = new ImagickPixelIterator($im); $it2 = ImagickPixelIterator::getPixelIterator($im); echo (count_rows($it1) == count_rows($it2) ? "match" : "no") . PHP_EOL; echo (count_objects($it1) == count_objects($it2) ? "match" : "no") . PHP_EOL; $it1->newPixelIterator(new Imagick('magick:rose')); echo 'done' . PHP_EOL;