Intereting Posts
Как реализовать MySQLi вложенные подготовленные инструкции? PHP Специальная функция SMTP-почты Возврат ERROR fputs send bytes failed errno = 32 Разбитая труба Функции AJAX и функции класса PHP Адаптация метода select для приема более одного параметра Laravel include вызывает ошибку: метод Illuminate \ View \ View :: __ toString () не должен вызывать исключение Как вы можете проверить, существует ли сессия PHP? Хорошая практика по внедрению элементов с состоянием в форме Zend Управление пользовательским кодом с помощью автозагрузчика Composer? Расчет рабочего времени между двумя датами Как «сгладить» многомерный массив до простого в PHP? zend формировать пользовательский атрибут в опции выбора? Использует ли извлечение ($ _ POST) неуверенно? Советы по управлению большим количеством файлов? Изменение цвета диаграммы диаграммы Google, когда ввод таблицы данных поступает из данных JSON с сервера Начало работы с PHP в Eclipse IDE

Создание высококонтрастного случайного цвета с использованием PHP

Мне нужно генерировать случайные цвета для всех пользователей в системе. Фокус в том, что 2 пользователя не могут иметь очень похожие цвета, их нужно отличить. У меня есть код для генерации случайных цветов, учитывая исходный цвет микса, но не могу найти способ генерировать случайные цвета с высокой контрастностью, используя только PHP

public static function generateRandomColor($rgb) { $red = rand(1, 256); $green = rand(1, 256); $blue = rand(1, 256); if (! empty($rgb)) { $red = ($red + $rgb['red']) / 2; $green = ($green + $rgb['green']) / 2; $blue = ($blue + $rgb['blue']) / 2; } $color = "rgb({$red}, {$green}, {$blue})"; return $color; } 

и тогда у меня есть петля:

 $colorsArr = array(); $mixed = array('red' => 255, 'green' => 255, 'blue' => 255); for($i = 0; $i < count($users); $i++) { $color = generateRandomColor($mixed); $colorsArr .= '<div style="width:25px; height: 25px; background-color: ' . $color . '"></div>'; } 

теперь это создает цвета, но некоторые цвета выглядят как друг друга. Цель состоит в том, чтобы иметь уникальный цвет для каждого пользователя. любая благодарность благодарна.

ПРИМЕЧАНИЕ. Я не хочу жестко кодировать цвета для 500 пользователей.

Мне стало скучно, вот какой код вы можете пообщаться:

 <?php define( COL_MIN_AVG, 64 ); define( COL_MAX_AVG, 192 ); define( COL_STEP, 16 ); // (192 - 64) / 16 = 8 // 8 ^ 3 = 512 colors function usercolor( $username ) { $range = COL_MAX_AVG - COL_MIN_AVG; $factor = $range / 256; $offset = COL_MIN_AVG; $base_hash = substr(md5($username), 0, 6); $b_R = hexdec(substr($base_hash,0,2)); $b_G = hexdec(substr($base_hash,2,2)); $b_B = hexdec(substr($base_hash,4,2)); $f_R = floor((floor($b_R * $factor) + $offset) / COL_STEP) * COL_STEP; $f_G = floor((floor($b_G * $factor) + $offset) / COL_STEP) * COL_STEP; $f_B = floor((floor($b_B * $factor) + $offset) / COL_STEP) * COL_STEP; return sprintf('#%02x%02x%02x', $f_R, $f_G, $f_B); } for( $i=0; $i<30; $i++ ) { printf('<div style="height: 100px; width: 100px; background-color: %s">&nbsp;</div>'."\n", usercolor(rand())); } 

Многие цвета будут выглядеть очень похожими, но шансы, что они будут рядом друг с другом, будут небольшими.