【发布时间】:2013-01-07 10:21:35
【问题描述】:
我需要为系统中的所有用户生成随机颜色。诀窍是两个用户不能有非常相似的颜色,他们需要区分。我有代码在给定原始混合颜色的情况下生成随机颜色,但无法找到仅使用 PHP 生成具有高对比度的随机颜色的方法
public static function generateRandomColor($rgb)
{
$red = rand(1, 256);
$green = rand(1, 256);
$blue = rand(1, 256);
if (! empty($rgb))
{
$red = ($red + $rgb['red']) / 2;
$green = ($green + $rgb['green']) / 2;
$blue = ($blue + $rgb['blue']) / 2;
}
$color = "rgb({$red}, {$green}, {$blue})";
return $color;
}
然后我有一个循环:
$colorsArr = array();
$mixed = array('red' => 255, 'green' => 255, 'blue' => 255);
for($i = 0; $i < count($users); $i++)
{
$color = generateRandomColor($mixed);
$colorsArr .= '<div style="width:25px; height: 25px; background-color: ' . $color . '"></div>';
}
现在这会生成颜色,但有些颜色看起来很像。目标是为每个用户提供独特的颜色。 任何帮助表示感谢。
注意:我不想为 500 个用户硬编码颜色
【问题讨论】:
-
500 个用户之间的对比度不能太高。只是随机的,不重复的。
-
按照你的解释,这是不可能的……除非你把高对比度的阈值设置得很低。
-
如果有新用户到达,你认为这应该如何工作?如果为 500 个用户创建一个最优解,当 501 个用户到达时应该怎么做??
-
$myhex = '#' . substr(md5($username), 0, 6); // output: #14c4b0 -
@Sammitch 如何保证颜色之间的对比?