使用php生成随机平面颜色

问题描述 投票:-1回答:1

我想为每个类别使用平面颜色,它必须是随机和独特的。

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

这正是我需要的!

我怎样才能用Php生成它?如果它生成像“基础平面颜色(例如。平绿色)”和类似的其他不同的25种颜色等(例如。平绿另一种色调)将会很棒

php random
1个回答
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 - >青色

我不知道你所说的“平面颜色”,但下面的类应该为你提供一个不错的可配置颜色生成器,它使用上面的理论生成没有灰色变化的颜色(至少有一个生成器是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

© www.soinside.com 2019 - 2024. All rights reserved.