【发布时间】:2010-10-27 14:34:36
【问题描述】:
在我的网络应用程序中,我有一个聊天室。我希望每个用户的名字都有不同的颜色,而不是全黑。实现这一目标的最佳方法是什么?我是否应该在每个用户注册我的应用程序时存储他们的 RGB/HEX 代码并将该字符串作为字段作为他们在数据库中记录的一部分?
【问题讨论】:
标签: database-design web-applications colors chatroom
在我的网络应用程序中,我有一个聊天室。我希望每个用户的名字都有不同的颜色,而不是全黑。实现这一目标的最佳方法是什么?我是否应该在每个用户注册我的应用程序时存储他们的 RGB/HEX 代码并将该字符串作为字段作为他们在数据库中记录的一部分?
【问题讨论】:
标签: database-design web-applications colors chatroom
特别使用色调值从 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) 推入队列。
继续这个过程...
您将自动为每个用户拥有尽可能广泛的可区分颜色。
【讨论】:
我有一个固定的颜色列表,让用户从中挑选并在数据库中存储一个索引,1 = red、2 = green 等。这将允许您更改每种颜色的阴影以匹配您的网站在发展过程中的设计。
例如,您可能希望“红色”与您的徽标匹配相同的红色;如果您将其作为 RGB 值存储在数据库中,而不仅仅是“红色”,则更改将更加困难。
【讨论】:
如果您的目标是让用户在聊天室中一目了然,这取决于您的用户群有多大。如果聊天室的平均大小是 10 人,但您的用户群有数千人,那么为每个人设置唯一的颜色是行不通的。最终,您会在同一个聊天室中出现相同颜色的稍微不同的深浅。
在这种情况下,只需保留一个明显不同颜色的简短列表,然后在单个聊天室中分配它们。
【讨论】:
作为您的方案的替代方案:
您可以像 irssi(和其他人一样)那样做,只需根据屏幕昵称的哈希值(使用您选择的函数)分配颜色。在这个系统下,昵称的长度和颜色(应该/将)是不相关的,所以不同的字母、不同的网名和不同的颜色的组合应该足以使事物既可区分,又在会话之间保持一致。在此方案中,您可能需要缓存的唯一内容是在会话中每个用户名的颜色,因此您不必进行无数次 md5 调用。这并不能保证每个用户都有不同的颜色(远非如此),也许您应该考虑一下您尝试使用该规范实现的目的。
【讨论】: