Уникальные цвета для каждого пользователя

В моем веб-приложении есть чат. Я хочу, чтобы имя каждого пользователя было окрашено по-разному, а не все они были черными. Как лучше всего этого добиться? Должен ли я хранить код RGB / HEX для каждого пользователя, когда он регистрируется в моем приложении, и помещать эту строку как поле как часть своей записи в базу данных?


person alamodey    schedule 20.05.2009    source источник


Ответы (4)


У меня был бы фиксированный список цветов, и пользователи могли бы выбирать из него и хранить индекс в базе данных, 1 = red, 2 = green и т. Д. Это позволило бы вам изменить оттенок каждого цвета, чтобы он соответствовал дизайну вашего сайта. развивается.

Например, вы можете захотеть, чтобы «красный» соответствовал тому же красному цвету, что и ваш логотип; если вы сохранили это значение в базе данных как значение RGB, а не просто «красный», его будет намного сложнее изменить.

person Dave Webb    schedule 20.05.2009
comment
Это решение ограничивает выбор пользователей и не дает им выбрать что-то глупое, например, белый или ярко-розовый. Он достаточно гибкий, чтобы вы могли добавить дополнительные цвета позже. - person Tom; 20.05.2009

Если ваша цель - сделать пользователя заметным с первого взгляда в чате, это зависит от того, насколько велика ваша пользовательская база. Если средний размер комнаты чата, скажем, 10, но ваша база пользователей исчисляется тысячами, уникальный цвет для каждого из них не сработает. В конце концов, в одной и той же чат-комнате будут отображаться немного разные оттенки одного и того же цвета.

В этом случае просто составьте короткий список явно разных цветов и назначьте их в одной комнате чата.

person UncleZeiv    schedule 20.05.2009

Как альтернатива вашей схеме:

Вы можете сделать это, как irssi (и другие), и просто назначить цвет на основе хэша (используя выбранную вами функцию) псевдонима экрана. Длина псевдонима и цвет (должен / будет) в этой системе не коррелируют, поэтому комбинации разных букв, разных экранных имен и разных цветов должно быть достаточно, чтобы сделать вещи различимыми, но согласованными от сеанса к сеансу. В этой схеме вам, возможно, придется кэшировать только в рамках сеанса цвет для каждого имени пользователя, поэтому вам не нужно выполнять миллионы вызовов md5. Это не гарантирует разные цвета для каждого пользователя (далеко не так), и, возможно, вам следует подумать о целях, которых вы пытаетесь достичь с помощью этой спецификации.

person Gregg Lind    schedule 20.05.2009

Создавайте цвета из HSV / HSL, используя, в частности, значение оттенка. Затем конвертируйте в RGB.

Дополнительную информацию о 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) в очередь.

Продолжайте этот процесс ...

У вас автоматически будет максимально возможный различимый цвет для каждого пользователя.

person Brian R. Bondy    schedule 20.05.2009