Уникальные цвета для каждого пользователя - PullRequest
1 голос
/ 20 мая 2009

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

Ответы [ 4 ]

6 голосов
/ 20 мая 2009

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

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

2 голосов
/ 20 мая 2009

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

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

1 голос
/ 20 мая 2009

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

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

0 голосов
/ 20 мая 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) в очередь.

Продолжить этот процесс ...

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

...