4

約 100 人のユーザーを持つアプリケーションがあります。すべてのユーザーが複数のエントリを持つことができるカレンダー ビューがあります。同じユーザーのエントリはすべて同じ色にする必要がありますが、ユーザーごとに異なる色にする必要があります。現時点では、配列で約 25 色を手動で定義しており、ユーザーが取得する色は次のように決定されます。

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

新しいユーザーごとに手動で色を追加したくはありません。ユーザーごとに色を選択するのも少し面倒です。

数値 (ユーザー ID) を色 (できれば RGB) にマップする簡単な関数はありますか? 次の質問は次のとおりです。関数を特定の種類の色 (つまり、白い文字が読める色のみ) に制限する方法はありますか?

4

2 に答える 2

3

解決策自体はありませんが、提案があります。

まず、各ユーザーの色を一意でランダムにしたいので、ある種の数値ハッシュ関数を使い始めることができます。これにより、最も一意である可能性が高い乱数が得られます。ハッシュ関数が適切で、ユーザーが数百人の場合は十分です。

次に、それを色に変換する必要があります。できれば、スペクトルの暗い端に変換する必要があります。RGBを使用する場合は、3つの数字が必要です。それらを暗くするために、合計またはR、G、Bを200未満に保つとしましょう。もちろん、それは推測ですが、かなり暗くする必要があります。1から3までの乱数[インデックス]を選択します。これが、最初に使用するR、G、またはBです。0から200までの数値を取得し、color[index1]に記録するように設定します。次に、残りのインデックスの1つである1〜3を選択します。このために、あなたがすでに持っている0とcolor[index1]の間の数を選んでください。残りの数値を200-color[index1]-color[index2]に設定します。これで、白と対照的なランダムなRGB値が得られました。

私はそのハッシュ関数を前もってあまり使用していなかったことに気づきました-多分それを捨てて、ユーザーIDをランダム(シード)として使用するだけです。

于 2012-04-19T14:00:08.837 に答える
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 から RGB 式の理解

于 2012-04-19T14:58:19.610 に答える