【问题标题】:Generate random colors生成随机颜色
【发布时间】:2023-06-09 14:15:01
【问题描述】:

我正在使用此代码生成随机颜色(效果很好):

  {
       $r = rand(128,255); 
       $g = rand(128,255); 
       $b = rand(128,255); 
       $color = dechex($r) . dechex($g) . dechex($b);
       return "#".$color;
  }

我只是想知道是否有一种方法/组合可以只生成明亮的颜色?

谢谢

【问题讨论】:

标签: php


【解决方案1】:

您的原始代码无法按预期工作 - 如果生成的数字较低,您可能会得到 #1ffff(1 是红色的低值) - 这是无效的。使用它更稳定:

echo "rgb(".$r.",".$g.",".$b.")";

因为rgb(123,45,67) 是完全有效的颜色规范。

按照类似的思路,您可以为 hsl 生成随机数:

echo "hsl(".rand(0,359).",100%,50%)";

这将生成任何色调的完全饱和的正常亮度颜色。但是请注意,只有最近的浏览器才支持 HSL,因此如果您担心浏览器支持,最好选择 RGB。

【讨论】:

    【解决方案2】:
    function getRandomColor() {
        $rand = array('0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f');
        $color = '#'.$rand[rand(0,15)].$rand[rand(0,15)].$rand[rand(0,15)].$rand[rand(0,15)].$rand[rand(0,15)].$rand[rand(0,15)];
        return $color;
    }
    

    【讨论】:

      【解决方案3】:

      我使用此代码检测背景颜色是浅色还是深色,然后选择正确的字体颜色,因此字体颜色在随机生成或用户输入的背景颜色上仍然可读/可见:

      //$hex: #AB12CD
      function ColorLuminanceHex($hex=0) {
        $hex = str_replace('#', '', $hex);
        $luminance = 0.3 * hexdec(substr($hex,0,2)) + 0.59 * hexdec(substr($hex,2,2)) + 0.11 * hexdec(substr($hex,4,2));
        return $luminance;
      }
      
      
      $background_color = '#AB12CD';
      $luminance = ColorLuminanceHex($background_color);
      if($luminance < 128) {
        $color = '#FFFFFF';
      }
      else {
        $color = '#000000';
      }
      

      【讨论】:

        【解决方案4】:

        使用上面chakroun yesser的answer,我创建了这个函数:

        function generateRandomColor($count=1){
            if($count > 1){
                $color = array();
                for($i=0; $count > $i; $i++)
                    $color[count($color)] = generateRandomColor();
            }else{
                $rand = array_merge(range(0, 9), range('a', 'f'));
                $color = '#'.$rand[rand(0,15)].$rand[rand(0,15)].$rand[rand(0,15)].$rand[rand(0,15)].$rand[rand(0,15)].$rand[rand(0,15)];
            }
            return $color;
        }
        

        【讨论】: