2009-05-20 88 views
1

在我的网络应用程序中,我有一个聊天室。我希望每个用户的名字都有不同的颜色,而不是全部使用黑色。达到此目的的最佳方法是什么?我应该为每个用户存储RGB/HEX代码,因为他们注册到我的应用程序并将该字符串作为字段作为其数据库中记录的一部分?每个用户的独特颜色

回答

0

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

See my answer here for more information on HSV/HSL

你可能想尽可能的颜色每次不同。

你可以通过保持颜色范围的队列来做到这一点。

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

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

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

继续这个过程......

您将自动获得尽可能区分颜色为每个用户。

6

我有一个固定的颜色列表,让用户从中选择并在数据库中存储索引,1 = red,2 = green等。这将允许您更改每种颜色的阴影以匹配设计您的网站随着它的发展。

例如,您可能希望“红色”与您的徽标匹配相同的红色;如果您已将此值存储为数据库中的RGB值而不是“红色”,则更改难度会更大。

+3

该解决方案限制了用户的选择,并阻止他们选择像白色或亮粉色的傻东西。它非常灵活,以便您可以稍后添加其他颜色 – Tom 2009-05-20 11:46:55

2

如果您的目标是让用户在聊天室内一目了然,这取决于您的用户群有多大。如果一个聊天室的平均大小是10,但是你的用户基数是几千,那么为他们每个人分配一个独特的颜色是行不通的。最终你会在相同的聊天室中看到相同颜色的稍微不同的阴影。

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

1

作为替代你的计划:

你可以不喜欢它IRSSI(和其他人),只是指定颜色基于散列(使用你选择的功能)的屏幕缺口的。在这个系统下,缺口和颜色的长度(应该/将会)是不相关的,所以不同字母,不同屏幕名称和不同颜色的组合应该足以使得事物可区分,但是在会话之间是一致的。在这个方案中,你可能必须缓存的这个唯一的东西是,因为会话是每个用户名的颜色,所以你不必做很多md5调用。这并不能保证每个用户都有不同的颜色(远离它),也许你应该考虑你试图用这个规范达到的目的。

相关问题