Current Path : /usr/opt/php56/share/pear/test/imagick/tests/ |
FreeBSD hs32.drive.ne.jp 9.1-RELEASE FreeBSD 9.1-RELEASE #1: Wed Jan 14 12:18:08 JST 2015 root@hs32.drive.ne.jp:/sys/amd64/compile/hs32 amd64 |
Current File : //usr/opt/php56/share/pear/test/imagick/tests/081_Imagick_getImageHistogram_basic.phpt |
--TEST-- Test Imagick, getImageHistogram --SKIPIF-- <?php require_once(dirname(__FILE__) . '/skipif.inc'); checkFormatPresent('png'); ?> --FILE-- <?php function getColorStatistics($histogramElements, $colorChannel) { $colorStatistics = array(); foreach ($histogramElements as $histogramElement) { //So broken. Wow. Much surprise. Sad. Bad. Sad, bad, sad. //$color = $histogramElement->getColorValueQuantum($colorChannel); $color = $histogramElement->getColorValue($colorChannel); $color = intval($color * 255); $count = $histogramElement->getColorCount(); if (array_key_exists($color, $colorStatistics)) { $colorStatistics[$color] += $count; } else { $colorStatistics[$color] = $count; } } ksort($colorStatistics); return $colorStatistics; } function getImageHistogram() { $backgroundColor = 'black'; $draw = new \ImagickDraw(); $draw->setStrokeWidth(0); //Lines have a wi $imagick = new \Imagick(); $imagick->newImage(500, 500, $backgroundColor); $imagick->setImageFormat("png"); $imagick->drawImage($draw); $histogramWidth = 256; $histogramHeight = 100; // the height for each RGB segment $imagick = new \Imagick(); $imagick->newPseudoImage(640, 480, "magick:logo"); //Resize the image to be small, otherwise PHP tends to run out of memory //This might lead to bad results for images that are pathologically 'pixelly' $imagick->adaptiveResizeImage(200, 200, true); $histogramElements = $imagick->getImageHistogram(); $histogram = new \Imagick(); $histogram->newpseudoimage($histogramWidth, $histogramHeight * 3, 'xc:black'); $histogram->setImageFormat('png'); $getMax = function ($carry, $item) { if ($item > $carry) { return $item; } return $carry; }; $colorValues = array( 'red' => getColorStatistics($histogramElements, \Imagick::COLOR_RED), 'lime' => getColorStatistics($histogramElements, \Imagick::COLOR_GREEN), 'blue' => getColorStatistics($histogramElements, \Imagick::COLOR_BLUE), ); $max = array_reduce($colorValues['red'] , $getMax, 0); $max = array_reduce($colorValues['lime'] , $getMax, $max); $max = array_reduce($colorValues['blue'] , $getMax, $max); $scale = $histogramHeight / $max; $count = 0; foreach ($colorValues as $color => $values) { $draw->setstrokecolor($color); $offset = ($count + 1) * $histogramHeight; foreach ($values as $index => $value) { $draw->line($index, $offset, $index, $offset - ($value * $scale)); } $count++; } $histogram->drawImage($draw); $bytes = $histogram->getImageBlob(); if (strlen($bytes) <= 0) { echo "Failed to generate image.";} } getImageHistogram(); echo "Ok"; ?> --EXPECTF-- Ok