Здравствуйте! Пробовал искать ответ на этот вопрос в поисковиках, но так ничего и не нашел.
Задача стоит в следующем:
Есть картинка (любая), нужно с помощью PHP скрипта выделить из нее основные цвета (по процентам). Я даже не могу найти как определить цвет отдельного пикселя в изображении.
Пожалуйста подскажите как можно реализовать такую задачу.
Вот пример реализации данной задачи:
http://wpapers[dot]ru/wallpapers/3d/Rendering/3004/
1. TrAxeX864 - 10 Ноября, 2011 - 12:08:03 - перейти к сообщению
2. Мелкий - 10 Ноября, 2011 - 12:37:13 - перейти к сообщению
3. TrAxeX864 - 10 Ноября, 2011 - 12:40:57 - перейти к сообщению
Выдает 7-значную цифру? Как преобразовать в формат RGB? Кроме того, - эта функция сильно кушает память, с помощью нее не возможно определить процент пикселов определенного цвета в изображении.
Может это можно на JS сделать?
Может это можно на JS сделать?
4. Самогонщик - 10 Ноября, 2011 - 12:45:18 - перейти к сообщению
5. TrAxeX864 - 10 Ноября, 2011 - 13:00:27 - перейти к сообщению
Самогонщик пишет:
А как перевести полученный в массив в строку формата #FF0000 например?
6. Самогонщик - 10 Ноября, 2011 - 13:23:52 - перейти к сообщению
http://forum[dot]codecall[dot]net/php-tu[dot][dot][dot]ors-rgb-php[dot]html
Поиском пользуются только трусы.
Поиском пользуются только трусы.
7. TrAxeX864 - 10 Ноября, 2011 - 16:33:41 - перейти к сообщению
PHP:
скопировать код в буфер обмена
скопировать код в буфер обмена
- class ParsingColors
- {
- //В этой переменной храниться ссылка на изображение
- var $img_obj;
- //Всего цветов в картинке
- var $total_colors;
- //Массив в котором содержаться все цвета и их количество в изображении
- var $arr_colors;
- function __construct($img_path)
- {
- //Создаем картинку
- }
- /****
- Метод с которого начинается распаршивание картинки на цвета
- ****/
- function process($interval_check) //Интервал проверки пикселей на цвет
- {
- for($i=0;$i<$this->img_height;$i++)
- {
- for($a=0;$a<$this->img_width;$a=$a+$interval_check)
- {
- else $array[$color]++;
- }
- }
- $this->destroy_img();
- $this->arr_colors = $array;
- return $array;
- }
- /****
- Метод отбирает цвета, которые наиболее часто используются и определяет процент использования
- ДЛЯ ВЫВОЗА ТРЕБУЕТСЯ ЗНАЧЕНИЕ ВОЗВРАЩАЕМОЕ ФУНКЦИЕЙ $this->process()
- ****/
- {
- $array = $this->arr_colors;
- //Счетчик
- $c = 1;
- foreach($array as $key => $var)
- {
- $result['procent'][$key] = ($var / $this->total_colors) * 100;
- if($c == $limit)
- break;
- $c++;
- }
- return $result;
- }
- /****
- Метод для уничтожения картинки
- ****/
- function destroy_img()
- {
- if($this->img_obj)
- }
- }
- $img = new ParsingColors('1.jpg');
- //Интервал проверки пиксела на цвет
- $img->process(5);
- $result = $img->Sort(20);
- foreach($result['procent'] as $key => $var)
- {
- echo "<div style='min-width:50px; min-height:50px; margin:5px; background-color:#{$key}; float:left;'>{$key} {$var}</div>";
- }
Написал такой класс, но он выводит 20 самых популярных цветов! А нужно чтобы выводил как здесь http://wpapers.ru/wallpapers/avto/other-cars/5647/. Тоесть чтобы не выводил чисто одинаковые цвета.