2009-05-20 10 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

私は固定色のリストを持っていて、そこから選択してデータベースにインデックスを格納するようにしました。、2 = greenなどです。これにより、各色の色合いを変更することができますあなたのサイトは進化しています。

たとえば、「赤い」があなたのロゴと同じ赤に一致するようにすることができます。これを単に "赤"ではなくデータベースにRGB値として保存していれば、変更するのがずっと難しくなります。

+3

この解決策は、ユーザーの選択を制限し、白または明るいピンクのような愚かなものを選ぶことを止めます。後で色を追加できるように柔軟性があります – Tom

2

あなたの目標がチャットルーム内の一目でユーザを区別できるようにすることは、ユーザベースの大きさによって異なります。チャットルームの平均サイズが、例えば10であるにもかかわらず、ユーザーベースが数千である場合、それぞれの固有の色を持つことは機能しません。最終的に、同じチャットルームに表示される同じ色のわずかに異なる色合いになります。

この場合、ちょうど異なる色の短いリストを保持し、1つのチャットルーム内に割り当てます。あなたのスキームに代わるものとして

1

のirssi(と他の人が行う)のようにあなたがそれを行うことができますし、単に画面ニックの(お好みの機能を使用して)ハッシュに基づいて色を割り当てます。このシステムでは、ニックネームと色の長さは無関係であるはずですから、異なる文字、異なるスクリーン名、色の組み合わせは、物事を区別できるようにするのに十分なはずですが、セッションごとに一貫していなければなりません。このスキームでは、キャッシュする必要があるのはで、セッションごとにのユーザー名ごとに色が付いているので、md5呼び出しの数を増やす必要はありません。これは、各ユーザー(それから遠い)に異なる色を保証するものではなく、その仕様で達成しようとしている目的について考えるべきかもしれません。

関連する問題