Генерация случайных цветов с использованием PHP - PullRequest
13 голосов
/ 01 сентября 2011

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

Ответы [ 12 ]

21 голосов
/ 01 сентября 2011

Вы могли бы

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

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

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

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

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

random, similar colors

РЕДАКТИРОВАТЬ 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/>";
}
?>
17 голосов
/ 21 ноября 2012

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

$randomcolor = '#' . dechex(rand(0,10000000));
4 голосов
/ 01 сентября 2011

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

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);
    }
}
3 голосов
/ 26 ноября 2013
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;}
2 голосов
/ 01 сентября 2011

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

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

2 голосов
/ 01 сентября 2011

вы можете сделать свою собственную функцию, которая будет генерировать ваш собственный цвет 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(); 
?>
1 голос
/ 26 апреля 2015

Еще одна короткая и простая версия: измените значения 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;
}
1 голос
/ 29 декабря 2014

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'
));
1 голос
/ 01 сентября 2011

Я бы просто ограничил диапазон 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>';
}
0 голосов
/ 25 января 2017

Попробуйте:

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

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

background-color: <?php echo $color ?>;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...