2012-05-22 3 views
1

Я использую этот код для генерации случайных цветов (который работает отлично):Генерация случайных цветов

{ 
     $r = rand(128,255); 
     $g = rand(128,255); 
     $b = rand(128,255); 
     $color = dechex($r) . dechex($g) . dechex($b); 
     return "#".$color; 
    } 

Я просто интересно, если есть способ/сочетание для создания только ярких цветов?

Спасибо

+2

Вы можете генерировать цвета в HSL/HSV, а затем преобразовать в RGB. http://en.wikipedia.org/wiki/HSL_and_HSV – Tom

ответ

4

Ваш исходный код не работает, как и следовало ожидать - если низкое число генерируется вы можете получить #1ffff (1 являющихся низкое значение красного) - который является недействительным. Это гораздо более стабильна, чтобы использовать это:

echo "rgb(".$r.",".$g.",".$b.")"; 

rgb(123,45,67) Поскольку вполне допустимо спецификация цвет.

Аналогичным образом, вы можете генерировать случайные числа для HSL:

echo "hsl(".rand(0,359).",100%,50%)"; 

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

2

Я использовал этот код для обнаружения кастрированный баран фона-цвета светлый или темный, а затем выбрать правильный цвет шрифта, так что цвет шрифта остается читаемым/видимый на случайно сгенерированных или пользователем введенного цвета фона:

//$hex: #AB12CD 
function ColorLuminanceHex($hex=0) { 
    $hex = str_replace('#', '', $hex); 
    $luminance = 0.3 * hexdec(substr($hex,0,2)) + 0.59 * hexdec(substr($hex,2,2)) + 0.11 * hexdec(substr($hex,4,2)); 
    return $luminance; 
} 


$background_color = '#AB12CD'; 
$luminance = ColorLuminanceHex($background_color); 
if($luminance < 128) { 
    $color = '#FFFFFF'; 
} 
else { 
    $color = '#000000'; 
} 
3
function getRandomColor() { 
    $rand = array('0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'); 
    $color = '#'.$rand[rand(0,15)].$rand[rand(0,15)].$rand[rand(0,15)].$rand[rand(0,15)].$rand[rand(0,15)].$rand[rand(0,15)]; 
    return $color; 
} 
0

Использование Чакрун yesser-х answer выше, я создал эту функцию:

function generateRandomColor($count=1){ 
    if($count > 1){ 
     $color = array(); 
     for($i=0; $count > $i; $i++) 
      $color[count($color)] = generateRandomColor(); 
    }else{ 
     $rand = array_merge(range(0, 9), range('a', 'f')); 
     $color = '#'.$rand[rand(0,15)].$rand[rand(0,15)].$rand[rand(0,15)].$rand[rand(0,15)].$rand[rand(0,15)].$rand[rand(0,15)]; 
    } 
    return $color; 
}