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

Я пытаюсь генерировать случайные цвета HTML в PHP, но у меня возникают проблемы с тем, чтобы они выглядели одинаково или в одной семье. Есть ли какая-то функция, которую я могу использовать для генерации цветов, которые «похожи» на другой цвет, помимо создания и конкатенации шести случайных шестнадцатеричных цифр?

    Ты мог

    1. Создайте одно случайное десятичное число между 25 и 230 (ваш «базовый» номер)
    2. Сгенерируйте 3 случайных числа между 1 и 25 (произвольно определяя, будут ли они положительными или отрицательными)
    3. Добавьте эти три номера на ваш базовый номер, чтобы получить три разных номера (ваши R, G и B)
    4. Повторите шаги 2 и 3, чтобы получить больше, аналогичные цвета

    Вы можете расширить диапазон номера модификатора (один от 1 до 25), чтобы получить больше различий в вашем цвете (вам также придется менять диапазон вашего базового номера, поэтому вы остаетесь от 0 до 255).

    Я ничего не знаю о PHP, поэтому я не ставил код. Но я думал, что это интересный вопрос =)

    EDIT: Я понял, что генерация 3 случайных базовых чисел на шаге 1 даст вам менее приглушенный (серый) цвет. Затем вы можете выполнить шаги 2 и 3, чтобы получить разные оттенки и т. Д., Как я уже упоминал (и, как отметил @Peter, увеличение числа модификаторов с риском получения меньших «похожих» цветов)

    Пример вывода этой методики ( на основе двух разных наборов базовых чисел ):

    случайные, похожие цвета

    РЕДАКТИРОВАТЬ 2: Вот PHP-реализация этого @Peter Ajtai

    <?php $spread = 25; for ($row = 0; $row < 100; ++$row) { for($c=0;$c<3;++$c) { $color[$c] = rand(0+$spread,255-$spread); } echo "<div style='float:left; background-color:rgb($color[0],$color[1],$color[2]);'>&nbsp;Base Color&nbsp;</div><br/>"; for($i=0;$i<92;++$i) { $r = rand($color[0]-$spread, $color[0]+$spread); $g = rand($color[1]-$spread, $color[1]+$spread); $b = rand($color[2]-$spread, $color[2]+$spread); echo "<div style='background-color:rgb($r,$g,$b); width:10px; height:10px; float:left;'></div>"; } echo "<br/>"; } ?> 

    Нашел что-то гораздо приятнее, размещенное в блоге кого-то по имени Craig Lotter :

     $randomcolor = '#' . dechex(rand(0,10000000)); 
     function randomColor() { $str = '#'; for ($i = 0; $i < 6; $i++) { $randNum = rand(0, 15); switch ($randNum) { case 10: $randNum = 'A'; break; case 11: $randNum = 'B'; break; case 12: $randNum = 'C'; break; case 13: $randNum = 'D'; break; case 14: $randNum = 'E'; break; case 15: $randNum = 'F'; break; } $str .= $randNum; } return $str;} 

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

     class colorGenerator { protected $rangeLower, $rangeHeight; private $range = 100; function __construct($range_lower = 80, $range_higher = 160) { // range of rgb values $this->rangeLower = $range_lower; $this->rangeHeight = $range_higher - $range_lower; } protected function randomColor() { // generate random color in range return $this->generateColor(rand(0, 100)); } protected function generateColor($value) { // generate color based on value between 0 and 100 // closer the number, more similar the colors. 0 is red. 50 is green. 100 is blue. $color_range = $this->range / 3; $color = new stdClass(); $color->red = $this->rangeLower; $color->green = $this->rangeLower; $color->blue = $this->rangeLower; if ($value < $color_range * 1) { $color->red += $color_range - $value; $color->green += $value; } else if ($value < $color_range * 2) { $color->green += $color_range - $value; $color->blue += $value; } else if ($value < $color_range * 3) { $color->blue += $color_range - $value; $color->red += $value; } $color->red = round($color->red); $color->blue = round($color->blue); $color->green = round($color->green); // returns color object with properties red green and blue. return $color; } protected function RGBColor($stdClass) { $RGB = "rgb({$stdClass->red}, {$stdClass->blue}, {$stdClass->green})"; return $RGB; } function CreateColor($value) { $stdClass = $this->generateColor($value); return $this->RGBColor($stdClass); } function CreateRandomColor($value) { $stdClass = $this->randomColor($value); return $this->RGBColor($stdClass); } } 

    вы можете создать свою собственную функцию, которая будет генерировать собственный цвет rgb

    http://sandbox.phpcode.eu/g/bf2a5/1

     <?php function gen(){ for($i=1;$i<200;$i++){ echo "<div style='color:rgb($i,$i,0);'>hello</div>"; } } gen(); ?> 

    или bgcolor

    http://sandbox.phpcode.eu/g/bf2a5/2

     <?php function gen(){ for($i=1;$i<200;$i++){ echo "<div style='background-color:rgb($i,$i,0);'>hello</div>"; } } gen(); ?> 

    Несколько лет назад я встретил этот класс . Он позволяет создавать бесплатные цвета на основе начального значения.

    Если вы ищете что-то более общее, ограничьте себя общим диапазоном, используя rand (очевидно, ниже 255) и используйте base_convert .

    Я бы просто ограничил диапазон rand () – params:

     // full color palette (32 bit) for($index = 0; $index < 30; $index++) { echo '<div style="background-color: #' . dechex(rand(0,16777215)) . '; display: inline-block; width: 50px; height: 50px;"></div>'; } echo '<br />'; // pastell colors for($index = 0; $index < 30; $index++) { echo '<div style="background-color: rgb(' . rand(128,255) . ',' . rand(128,255) . ',' . rand(128,255) . '); display: inline-block; width: 50px; height: 50px;"></div>'; } echo '<br />'; // dark colors for($index = 0; $index < 30; $index++) { echo '<div style="background-color: rgb(' . rand(0,128) . ',' . rand(0,128) . ',' . rand(0,128) . '); display: inline-block; width: 50px; height: 50px;"></div>'; } echo '<br />'; // shades of blue for($index = 0; $index < 30; $index++) { echo '<div style="background-color: rgb(' . rand(0,56) . ',' . rand(0,56) . ',' . rand(0,255) . '); display: inline-block; width: 50px; height: 50px;"></div>'; } echo '<br />'; // shades of green for($index = 0; $index < 30; $index++) { echo '<div style="background-color: rgb(' . rand(0,56) . ',' . rand(0,255) . ',' . rand(0,56) . '); display: inline-block; width: 50px; height: 50px;"></div>'; } echo '<br />'; // shades of red for($index = 0; $index < 30; $index++) { echo '<div style="background-color: rgb(' . rand(0,255) . ',' . rand(0,56) . ',' . rand(0,56) . '); display: inline-block; width: 50px; height: 50px;"></div>'; } 

    RandomColor был перенесен на PHP, вы можете найти его здесь . С его помощью также возможно иметь случайный свет или случайные темные цвета.
    Пример использования:

     include('RandomColor.php'); use \Colors\RandomColor; // Returns a hex code for a 'truly random' color RandomColor::one(array( 'luminosity' => 'random', 'hue' => 'random' )); // Returns a hex code for a light blue RandomColor::one(array( 'luminosity' => 'light', 'hue' => 'blue' )); в include('RandomColor.php'); use \Colors\RandomColor; // Returns a hex code for a 'truly random' color RandomColor::one(array( 'luminosity' => 'random', 'hue' => 'random' )); // Returns a hex code for a light blue RandomColor::one(array( 'luminosity' => 'light', 'hue' => 'blue' )); 

    Другая короткая и простая версия: измените значения mt_rand (X, Y) , чтобы создать желаемый диапазон цветов: (0, 255) – полный диапазон; (180, 255) – пастельная палитра; (0, 100) – темная палитра; и т.д…

     function gen_color(){ mt_srand((double)microtime()*1000000); $color_code = ''; while(strlen($color_code)<6){ $color_code .= sprintf("%02X", mt_rand(0, 255)); } return $color_code; } в function gen_color(){ mt_srand((double)microtime()*1000000); $color_code = ''; while(strlen($color_code)<6){ $color_code .= sprintf("%02X", mt_rand(0, 255)); } return $color_code; } 

    Если вы хотите создать похожие цвета, было бы проще использовать HSV вместо RGB , но вам нужно будет конвертировать между ними.

    PHP HSV для понимания формулы RGB

    и / или

    http://www.brandonheyer.com/2013/03/27/convert-hsl-to-rgb-and-rgb-to-hsl-via-php/

    В ордетах для получения похожих цветов вы исправите 2 из трех компонентов и создаете случайные значения для третьего, например:

     function random_color(){ // random hue, full saturation, and slightly on the dark side return HSLtoRGB(rand(0,360), 1, 0.3); } 

    Это может помочь sprintf("%06s\n", strtoupper(dechex(rand(0,10000000))));

    Попробуй это:

     //For every hex code $random = mt_rand(0, 16777215); $color = "#" . dechex($random); 

    И вы можете просто использовать его так:

     background-color: <?php echo $color ?>;