我想为每个类别使用平面颜色,并且必须随机和唯一。
我找到了那个网站。 => http://flatcolors.net/random.php
这正是我需要的!
我如何用Php生成它?如果它产生的像“基础平面颜色(例如。平绿色)”和类似的其他不同的25种颜色等(例如。平绿另一种色调)将是非常棒的
答案 0 :(得分:1)
您好,B.Esen
在RGB color model中,颜色有3个分量,表示该颜色中的红色,绿色,蓝色。因此,为了生成随机颜色,您只需要为0到255生成3个随机数,然后转换为16,并将结果连接成类似#ff23ab的地方,其中ff => 255(红色量),23(基数16)=> 35(绿色量)和ab(碱16)为171(蓝色量)。基色可以在“边缘”找到。其中r,g,b的值为0或255,不包括白色和黑色,其中所有值均为0或255.
所以你有以下基色
我不知道你所说的"平面颜色",但是下面的类应该为你提供一个不错的可配置颜色生成器,它使用上面的理论生成没有灰色的颜色变化(至少有一个发生器是0)。请记住,下面的代码不是"生产就绪",并且旨在具有说明目的。在生产中使用它之前,你需要使它变得万无一失(设置边界,检查除零等)。
class ColorGenerator
{
/**
* Used to set the lower limit of RGB values.
* The higher this value is the fewer gray tone will be generated 70+ to 100 recommended
*
* @var int
*/
protected static $lowerLimit = 70;
/**
* Used to set the higher limit of RGB values.
* The higher this value is the fewer gray tone will be generated 180+ to 255 recommended
*
* @var int
*/
protected static $upperLimit = 255;
/**
* Distance between 2 selected values.
* Colors like ff0000 and ff0001 are basically the same when it comes to human eye perception
* increasing this value will result in more different color but will lower the color pool
*
* @var int
*/
protected static $colorGap = 20;
/**
* Colors already generated
*
* @var array
*/
protected static $generated = array();
/**
* @return string
*/
public static function generate()
{
$failCount = 0;
do {
$redVector = rand(0, 1);
$greenVector = rand(0, 1);
$blueVector = rand(!($redVector || $greenVector), (int)(($redVector xor $greenVector) || !($redVector || $greenVector)));
$quantiles = floor((self::$upperLimit - self::$lowerLimit) / self::$colorGap);
$red = $redVector * (rand(0, $quantiles) * self::$colorGap + self::$lowerLimit);
$green = $greenVector * (rand(0, $quantiles) * self::$colorGap + self::$lowerLimit);
$blue = $blueVector * (rand(0, $quantiles) * self::$colorGap + self::$lowerLimit);
$failCount++;
} while (isset(self::$generated["$red,$green,$blue"]) && $failCount < 1000);
return self::rgb($red, $green, $blue);
}
/**
* @param int $red
* @param int $green
* @param int $blue
* @return string
*/
protected static function rgb($red, $green, $blue)
{
$red = base_convert($red, 10, 16);
$red = str_pad($red, 2, '0', STR_PAD_LEFT);
$green = base_convert($green, 10, 16);
$green = str_pad($green, 2, '0', STR_PAD_LEFT);
$blue = base_convert($blue, 10, 16);
$blue = str_pad($blue, 2, '0', STR_PAD_LEFT);
return '#' . $red . $green . $blue;
}
}
希望这会有所帮助。快乐的编码
Alexandru Cosoi