生成随机平颜色用PHP
问题描述:
我想用平颜色为每个类别和它必须是随机和独特。生成随机平颜色用PHP
我发现那个网站。 =>http://flatcolors.net/random.php
这正是我需要的!
我如何用Php生成?这将是真棒,如果它是产生像“基地平光颜色(例如,平绿)”,并与其他类似的不同颜色25等(例如,平绿另一个音)
答
你好,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.
因此,您有以下基色
- 0000FF - >蓝色
- 0000FF - >蓝色
- 00FF00 - >绿色
- FF0000 - >红色
- FFFF00 - >黄色
- ˚F f00ff - >品红
- 00FFFF - >青色
我不知道你所说的“平色”是什么,但低于类应为您提供一个体面的配置的颜色产生,使用理论以产生没有灰度变化的颜色(至少一个发生器是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 amd 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
+0
谢谢!这实际上是我需要的:) –
你是什么意思的“平面颜色”?为什么你不能简单地创建一个随机的颜色值,并通过你检查过的已经使用过的颜色的简单数组来防止重新使用?那么这里你的具体问题是什么? – arkascha
你到目前为止已经尝试过实现这个目标吗? –
@arkascha是的,我可以创建一个随机颜色,但它也给我一些不好的颜色。你会明白,如果你知道平面颜色是什么意思。所以我想我必须过滤我的随机颜色,但如何?。也许我无法解释清楚,因为我的英语.. –