Я пытаюсь генерировать случайные цвета HTML в PHP, но у меня возникают проблемы с тем, чтобы они выглядели одинаково или в одной семье. Есть ли какая-то функция, которую я могу использовать для генерации цветов, которые «похожи» на другой цвет, помимо создания и конкатенации шести случайных шестнадцатеричных цифр?
Ты мог
Вы можете расширить диапазон номера модификатора (один от 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]);'> Base Color </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 ?>;