Я пытаюсь генерировать случайные цвета HTML в PHP, но мне не удается заставить их выглядеть похожими или в том же семействе. Есть ли какая-то функция, которую я могу использовать для генерации цветов, которые "похожи" на другой цвет, помимо генерации и конкатенации шести случайных шестнадцатеричных цифр?
Случайное генерирование цвета с использованием PHP
Ответ 1
Вы могли
- Создайте одно случайное десятичное число между 25 и 230 (ваш "базовый" номер)
- Генерировать 3 случайных числа между 1 и 25 (произвольно решающее, будут ли они положительными или отрицательными)
- Добавьте эти три числа к своему базовому номеру, чтобы получить три разных числа (ваши R, G и B)
- Повторите шаги 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]);'> 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/>";
}
?>
Ответ 2
Нашел что-то гораздо приятнее, размещенное на в блоге кого-то по имени Craig Lotter
:
$randomcolor = '#' . dechex(rand(0,10000000));
Ответ 3
свернутый класс, который я написал на основе цветов, разделяющих яркость. ближе к диапазону, темнее цвета. выше диапазон, ярче цвета.
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);
}
}
Ответ 4
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;}
Ответ 5
вы можете создать свою собственную функцию, которая будет генерировать ваш собственный цвет 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();
?>
Ответ 6
Несколько лет назад я встретил этот класс. Он позволяет создавать дополнительные цвета на основе начального значения.
Если вы ищете что-то более общее, ограничьте себя общим диапазоном, используя rand
(очевидно, ниже 255), и используйте base_convert
.
Ответ 7
Я бы просто ограничил диапазон 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>';
}
Ответ 8
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'
));
Ответ 9
Другая короткая и простая версия: измените значения 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;
}
Ответ 10
Если вы хотите создать похожие цвета, было бы проще использовать 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);
}
Ответ 11
Это может помочь sprintf("%06s\n", strtoupper(dechex(rand(0,10000000))));
Ответ 12
Попробуйте следующее:
//For every hex code
$random = mt_rand(0, 16777215);
$color = "#" . dechex($random);
И чем вы можете просто использовать его так:
background-color: <?php echo $color ?>;