2016-10-19 6 views
1

をRGBカラーを生成し、私は次の規則に従って、ユーザーのデフォルトのアバターの背景のための一貫性のある色を設定したいと思います。各は(繰り返し可能な方法で)ユーザーの名前から

  • RGB値を、 (例えば、0〜200)
  • "John Smith"や "John Smithy"などのフルネームを使用すると、色が変わります。
  • 名前を少し変更すると、まったく別の色になるはずです。

私はこれらの線に沿って何かを考えています:

  • は、3つの部分のそれぞれを取ると0の間でフロートにそれを正規化する3等分
  • で構成されて何かに名前をハッシュ1
  • これらを200倍してr、gまたはb値を取得します。

しかし、私はそれについてどう考えているのかよく分かりません。助言がありますか?もし私が理想的な余分な宝石を手に入れなければ、それをやることができたら。私はすでにいくつかのハッシュのためにMD5を使用しています。

注:これはセキュリティ上の問題ではありません。ちょっと楽しかったので、2つの異なる名前が同じ色をしばらくしてしまうと、それほど問題にはなりませんが、一般的にはうれしいでしょう可能な限り色値を変化させる。

答えて

3

あなたは介してユーザの名前のMD5​​ハッシュを構築することができます:最初の3つの16ビット整数抽出

require 'digest' 

name = 'foo' 
digest = Digest::MD5.digest(name) 
#=> "\xAC\xBD\x18\xDBL\xC2\xF8\\\xED\xEFeO\xCC\xC4\xA4\xD8" 

values = digest.unpack('SSS') 
#=> [48556, 56088, 49740] 

を0にこれらの0 65535個の値をマップ..200:

values.map { |i| i * 201/0x10000 } 
#=> [148, 172, 152] 
+2

これはまさに私が数年前にしたことです。残念ながら、私のマネージャーの名前は好きではない色にマッピングされていました(ピンクまたはライトオレンジ色でした)。私はそこに定数を導入して、マッピングに影響を与えなければなりませんでした。 –

+0

私は同様のアプローチをカラーラベルに使用しています。しかし、ランダムなRGB値の代わりに、私はHSLを全くランダムな色相で使用しており、明度と彩度のバリエーションは限られています。これにより、一貫した色が得られます。 – Stefan

+0

@Stefanそれは良いアイデアです、私はそれを行うかもしれない、ありがとう。 –

関連する問題