Intereting Posts
Вывести RSS-канал как html? PHP нет ждать sem_acquire? Получение имен для отображения в выпадающем списке с помощью cakephp PHPExcel – .xlsx загружает нечитаемый контент Почему PHP имеет абстрактные классы, если вы можете использовать интерфейс и черты? Мои файлы cookie доступны только на страницах PHP, на которые они установлены, это нормально? Всегда ли определена переменная сервера HTTP_HOST? Неустранимая ошибка: класс 'CI_Model' не найден Извлечение данных сайта через веб-искатель выводит ошибку из-за неправильного совпадения индекса массива добавление маршрута к маршрутизатору в Zend Framework переменная $ _session Можем ли мы иметь язык, отличный от английского, в URL? Работа с мостом Php-Java Как следует анализировать фоновые изображения PHP (простой html dom parser) и другие изображения веб-страницы? что является хорошим методом для дезинфекции всего массива $ _POST в php?

Обнаружение цветов для изображения с помощью PHP

Как определить верхние 2 цвета изображения в PHP?

например, у меня есть этот образ:

введите описание изображения здесь

Эта функция / процесс вернется: 0000FF или синий, FFFF00 или ЖЕЛТЫЙ

благодаря

Вот сценарий, который даст вам список:

function detectColors($image, $num, $level = 5) { $level = (int)$level; $palette = array(); $size = getimagesize($image); if(!$size) { return FALSE; } switch($size['mime']) { case 'image/jpeg': $img = imagecreatefromjpeg($image); break; case 'image/png': $img = imagecreatefrompng($image); break; case 'image/gif': $img = imagecreatefromgif($image); break; default: return FALSE; } if(!$img) { return FALSE; } for($i = 0; $i < $size[0]; $i += $level) { for($j = 0; $j < $size[1]; $j += $level) { $thisColor = imagecolorat($img, $i, $j); $rgb = imagecolorsforindex($img, $thisColor); $color = sprintf('%02X%02X%02X', (round(round(($rgb['red'] / 0x33)) * 0x33)), round(round(($rgb['green'] / 0x33)) * 0x33), round(round(($rgb['blue'] / 0x33)) * 0x33)); $palette[$color] = isset($palette[$color]) ? ++$palette[$color] : 1; } } arsort($palette); return array_slice(array_keys($palette), 0, $num); } $img = 'icon.png'; $palette = detectColors($img, 6, 1); echo '<img src="' . $img . '" />'; echo '<table>'; foreach($palette as $color) { echo '<tr><td style="background:#' . $color . '; width:36px;"></td><td>#' . $color . '</td></tr>'; } echo '</table>'; 

Если вы можете позвонить внешней утилите, Imagemagick может генерировать гистограмму для вас. Вероятно, это будет намного быстрее, чем реализация PHP.

В принципе, эта команда дает вам список цветов, отсортированных по большинству доминирующих:

 convert 'http://img.ruphp.com/detection/J2txV.png' -format %c histogram:info:-|sort -r 

Возможно, вам захочется сначала отобразить изображение в фиксированную палитру («Завершить» цвета). Это то, что я использую:

 convert 'http://img.ruphp.com/detection/J2txV.png' -modulate 100,200,100 -remap 'http://img.ruphp.com/detection/GvTqB.png' -format %c histogram:info:-|sort -r