2016-09-21 97 views
-1

我想用平颜色为每个类别和它必须是随机独特生成随机平颜色用PHP

我发现那个网站。 =>http://flatcolors.net/random.php

这正是我需要的!

我如何用Php生成?这将是真棒,如果它是产生像“基地平光颜色(例如,平绿)”,并与其他类似的不同颜色25等(例如,平绿另一个音)

+1

你是什么意思的“平面颜色”?为什么你不能简单地创建一个随机的颜色值,并通过你检查过的已经使用过的颜色的简单数组来防止重新使用?那么这里你的具体问题是什么? – arkascha

+1

你到目前为止已经尝试过实现这个目标吗? –

+0

@arkascha是的,我可以创建一个随机颜色,但它也给我一些不好的颜色。你会明白,如果你知道平面颜色是什么意思。所以我想我必须过滤我的随机颜色,但如何?。也许我无法解释清楚,因为我的英语.. –

回答

0

你好,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.

因此,您有以下基色

  1. 0000FF - >蓝色
  2. 0000FF - >蓝色
  3. 00FF00 - >绿色
  4. FF0000 - >红色
  5. FFFF00 - >黄色
  6. ˚F f00ff - >品红
  7. 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

谢谢!这实际上是我需要的:) –