使用php生成随机平面颜色

时间:2016-09-21 07:43:29

标签: php random

我想为每个类别使用平面颜色,并且必须随机唯一

我找到了那个网站。 => http://flatcolors.net/random.php

这正是我需要的!

我如何用Php生成它?如果它产生的像“基础平面颜色(例如。平绿色)”和类似的其他不同的25种颜色等(例如。平绿另一种色调)将是非常棒的

1 个答案:

答案 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.

所以你有以下基色

  1. 0000ff - >蓝色
  2. 00ff00 - >绿色
  3. ff0000 - >红色
  4. ffff00 - >黄
  5. ff00ff - >品红
  6. 00ffff - >青色
  7. 我不知道你所说的"平面颜色",但是下面的类应该为你提供一个不错的可配置颜色生成器,它使用上面的理论生成没有灰色的颜色变化(至少有一个发生器是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