2012-04-19 5 views
4

私は約100人のユーザーを持つアプリケーションを持っています。私たちは、すべてのユーザーが複数のエントリを持つことができるカレンダービューを持っています。同じユーザーのすべてのエントリは同じ色でなければなりませんが、異なるユーザーは異なる色を使用する必要があります。私たちは、手動ですべての新しいユーザーのために色を追加したい、とそれぞれの色を選択していない現時点では、手動で配列に約25色を定義して、ユーザーが取得する色がartbitrary numberをrgb colorに変換するには?

$color = $colors[$userid % count($colors)]; 

によって決定されますユーザーはちょっと面倒すぎるようです。

数字(ユーザーID)を色(好ましくはRGB)にマッピングする簡単な関数はありますか?上昇する次の質問は、特定の種類の色(つまり、白い文字が読み取れる色のみ)に機能を制限する方法はありますか?

+2

ユーザIDは6桁の16進コードであることが起こらない、それはありませんか? –

+0

いいえ、残念ながら –

答えて

3

私には解決法はありませんが、それは示唆です。

まず、各ユーザーの色を一意にするがランダムにしたいので、ある種の数値ハッシュ関数を使い始めることができます。それはあなたに最もユニークな乱数を与えます。あなたのハッシュ関数がまともであり、あなたのユーザーが十分な数百になっているならば。

これを色に変換する必要があります。スペクトルの暗い端で行うことが望ましいです。あなたがRGBで行くなら、あなたは3つの数字が必要です。暗いままにするには、R、G、Bの合計を200以下に抑えておきましょう。それはもちろん推測ですが、かなり暗くなるはずです。 1と3の間の乱数[インデックス]を選んでください。それはあなたが始めるR、G、Bです。 0〜200の数値を取得し、color [index1]に記録するように設定します。残りの1〜3のインデックスの1つを選択します。このためには、すでに持っている色と[index1]の間の数字を選択します。残りの数を200色[インデックス1] - カラー[インデックス2]に設定します。これで、白と対比するランダムなRGB値が得られました。

私はそのハッシュ関数から多くの使用を得ていないことを実感しました。おそらくそれを捨てて、ランダム(シード)としてuseridを使用します。

+0

これはかなりうまく聞こえますが、すぐに試してみるつもりです。 –

+0

どのように動作するか教えてください。 –

+0

私はこのようなものを実装しました。私は乱数ジェネレータをユーザIDでシードし、合計(R + G + B)に対して200と300の間の乱数を生成し、次にR、G、Bの3つのランダムパーセンテージを生成します。 100に合計して対応する値を割り当てます。もちろん、私はいくつかの追加チェックを追加しなければならなかったので、R、G、Bは決して> 255ではありません。 –

2

色相 - 彩度 - 明度または色相 - 彩度 - 値(HSLまたはHSV)空間で作業したいとします。

http://en.wikipedia.org/wiki/HSL_and_HSV

色相と彩度に基づいていくつかの色を定義することによってスタートし、テキストが読みやすくなり、最高許容レベルに明るさを設定します。

これらの色の色相と彩度を固定して明度を下げることができます。

異なる色相と最大/最小許容明るさで許容できる25色を選択することから始めました。

インデックスの色を生成するには、最初に基本色を選択してbase = id % 25とします。次に、その色のインデックスに応じて輝度を下げます。index = (Math.floor(id/25))。その値に基づいて許容輝度範囲内のどこかに輝度を設定します。色ごとに5つの輝度値があるとしましょう。

lightness = maxLightness - index*(maxLightness/4*minLightness) 

これは単純に各色の明度を変えます。好みに応じて、彩度と色相を少し変えることもできます。 HSVとRGBの間の変換は、文書化された手順です。

PHP HSV to RGB formula comprehension

+0

これもやってみる価値があります、ありがとうございます。 –

関連する問題