Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: объеденение оттенков цвета

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Описание: извлечь несколько максимальных цветов из картинки
TroL
Отправлено: 29 Ноября, 2012 - 05:47:44
Post Id


Гость


Покинул форум
Сообщений всего: 73
Дата рег-ции: Нояб. 2012  


Помог: 0 раз(а)




Здравствуйте, кто ни будь делал фильтр по цвету для загруженных фотографий? А вот мне пришлось...
Все сделал, все работает.

Да же сократил оттенки с ~17млн до ~4тыс но этого все равно много.

Помогите решить эту проблему и сократить количество оттенков до ~100

опишу ситуацию как вы знаете шестнадцатеричная кодировка цвета это типа #abf123 - таких может быть (если я правильно посчитал) 16^6 = 16 777 216 оттенков.

Их я сократил путем #aaff22. То есть строку разделил на три части (ab f1 23) из двух символов и второй символ переписал на первый. получилось 16^3 = 4096 оттенков. Тоесть #6699EE и #77AAFF цвета похожи но оттенки разные, как их можно объедение?

если надо код могу скинуть
 
 Top
sKaa
Отправлено: 29 Ноября, 2012 - 05:53:04
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 979
Дата рег-ции: Окт. 2011  
Откуда: Россия г. Нижний Новгород


Помог: 25 раз(а)

[+]


Может я сейчас скажу глупость, но переведите ваш hex ту rgb и там явно укажите "оттенки"
120 120 120
 
 Top
TroL
Отправлено: 29 Ноября, 2012 - 05:56:21
Post Id


Гость


Покинул форум
Сообщений всего: 73
Дата рег-ции: Нояб. 2012  


Помог: 0 раз(а)




решил попробовать так:
беру первый третий и пятый символ
каждый символ прогоняю по массиву
$maskcolor = array("0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "A", "B", "C", "D", "E", "F");
нахожу ключ в массиве (предварительно визуально разделив массив на 4части по 4 символа)
узнаю в какой части находится то символ и получаю остальные символы из этой части

и так с каждым из трех символов

для цвета #FFFFFF получаю массив вида
array(4) { [0]=> string(1) "C" [1]=> string(1) "D" [2]=> string(1) "E" [3]=> string(1) "F" }
array(4) { [0]=> string(1) "C" [1]=> string(1) "D" [2]=> string(1) "E" [3]=> string(1) "F" }
array(4) { [0]=> string(1) "C" [1]=> string(1) "D" [2]=> string(1) "E" [3]=> string(1) "F" }

как сделать что бы оттенки вида CCFFDD, CCCCCC, EEFFCC и другие попадали в один массив, то есть как то приравнивались к FFFFFF
(Добавление)
sKaa пишет:
Может я сейчас скажу глупость, но переведите ваш hex ту rgb и там явно укажите "оттенки"
120 120 120

каким способом это можно сделать?

(Отредактировано автором: 29 Ноября, 2012 - 05:57:50)

 
 Top
sKaa
Отправлено: 29 Ноября, 2012 - 06:07:28
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 979
Дата рег-ции: Окт. 2011  
Откуда: Россия г. Нижний Новгород


Помог: 25 раз(а)

[+]


PHP:
скопировать код в буфер обмена
  1. function hex2rgb($color)
  2. {
  3.     if ($color[0] == '#')
  4.         $color = substr($color, 1);
  5.  
  6.     if (strlen($color) == 6)
  7.         list($r, $g, $b) = array($color[0].$color[1],
  8.                                  $color[2].$color[3],
  9.                                  $color[4].$color[5]);
  10.     elseif (strlen($color) == 3)
  11.         list($r, $g, $b) = array($color[0].$color[0], $color[1].$color[1], $color[2].$color[2]);
  12.     else
  13.         return false;
  14.  
  15.     $r = hexdec($r); $g = hexdec($g); $b = hexdec($b);
  16.  
  17.     return array($r, $g, $b);
  18. }


Функция вернет вам 3 цвета в массиве. значение цветов red, green, blue от нуля до 255.
var_dump(hex2rgb('#FF00DD')); // array(3) { [0]=> int(255) [1]=> int(0) [2]=> int(221) }

(Отредактировано автором: 29 Ноября, 2012 - 06:13:40)

 
 Top
TroL
Отправлено: 29 Ноября, 2012 - 06:14:32
Post Id


Гость


Покинул форум
Сообщений всего: 73
Дата рег-ции: Нояб. 2012  


Помог: 0 раз(а)




а ты понимаешь что в таком виде столько же комбинаций ~17млн?!
Я на оборот специально перевел в hex так как там всего лишь 16 символов, а цвет можно обрабатывать по трем символам не #FFCC66 а #FC6

так что этот вариант не подойдет((
 
 Top
sKaa
Отправлено: 29 Ноября, 2012 - 06:18:32
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 979
Дата рег-ции: Окт. 2011  
Откуда: Россия г. Нижний Новгород


Помог: 25 раз(а)

[+]


var_dump(hex2rgb('#F0D')); // array(3) { [0]=> int(255) [1]=> int(0) [2]=> int(221) }
TroL, Я просто предложил как ещё один вариант куда можно копать. Сразу же предупредил, что может это глупость всё) Прошу прощения, что не смог помочь, ждите гуру, может они вам что-то подскажут.
 
 Top
TroL
Отправлено: 29 Ноября, 2012 - 06:20:09
Post Id


Гость


Покинул форум
Сообщений всего: 73
Дата рег-ции: Нояб. 2012  


Помог: 0 раз(а)




sKaa пишет:
var_dump(hex2rgb('#F0D')); // array(3) { [0]=> int(255) [1]=> int(0) [2]=> int(221) }
TroL, Я просто предложил как ещё один вариант куда можно копать. Сразу же предупредил, что может это глупость всё) Прошу прощения, что не смог помочь, ждите гуру, может они вам что-то подскажут.


Все равно спасибо, буду думать что да как
(Добавление)
Удалось сократить до 512 оттенков путем перевода в восьмеричную кодировку по своему алгоритму)
 
 Top
TroL
Отправлено: 29 Ноября, 2012 - 08:56:02
Post Id


Гость


Покинул форум
Сообщений всего: 73
Дата рег-ции: Нояб. 2012  


Помог: 0 раз(а)




Тема еще актуальна, ищу еще способы
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« HTTP и PHP »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB