每个用户的独特颜色

时间:2009-05-20 11:25:26

标签: database-design web-applications colors chatroom

在我的网络应用程序中,我有一个聊天室。我希望每个用户的名字都有不同的颜色,而不是全黑。实现这一目标的最佳方法是什么?我应该在每个用户注册我的应用程序时存储RGB / HEX代码,并将该字符串作为其记录的一部分放在数据库中吗?

4 个答案:

答案 0 :(得分:6)

我有一个固定的颜色列表,让用户从中选择并在数据库中存储索引1 = red2 = green等。这样可以改变颜色的阴影每种颜色都与您网站的设计相匹配。

例如,您可能希望“红色”与徽标的红色相同;如果你把它作为RGB值存储在你的数据库中而不仅仅是“红色”那么它将更难改变。

答案 1 :(得分:2)

如果您的目标是让用户在聊天室内一目了然,那么这取决于您的用户群有多大。如果聊天室的平均大小是10,但是你的用户群数以千计,那么每种聊天室都有一种独特的颜色是行不通的。最终你会在同一个聊天室中出现略有不同的相同颜色的阴影。

在这种情况下,只需保留一份明显不同颜色的简短列表,并将其分配到单个聊天室中。

答案 2 :(得分:1)

作为您的计划的替代方案:

你可以像irssi(和其他人一样)这样做,只需根据屏幕缺口的哈希(使用你选择的功能)分配颜色。在这个系统下,缺口和颜色的长度(应该/将)是不相关的,因此不同字母,不同屏幕名称和不同颜色的组合应足以使事物既可区分,又在会话之间保持一致。在此方案中,您可能必须缓存的唯一事情是在会话中每个用户名的颜色,因此您不必执行数以万计的md5调用。这并不能保证每个用户的颜色不同(远离它),也许您应该考虑使用该规范尝试实现的目的。

答案 3 :(得分:0)

特别是使用色调值从HSV / HSL生成颜色。然后转换为RGB。

See my answer here for more information on HSV/HSL

您可能希望每次都有尽可能不同的颜色。

您可以通过保留颜色范围队列来完成此操作。

如果队列为空,则返回hue 0并将对(0,360)插入队列。 下次你想要一个颜色从队列中弹出一个元素(0,360),并返回这些值之间的中点:180。然后将(0,180)和(180,360)推入队列。

下次你想要一个颜色从队列中弹出一个元素(0,180),并返回这些值之间的中点:90。然后将(0,90)和(90,180)推入队列。 / p>

下次你想要一个颜色从队列中弹出一个元素(180,360),并返回这些值之间的中点:270。然后将(180,270)和(270,360)推入队列。 / p>

继续这个过程...

您将自动为每个用户提供最广泛的可区分颜色。