2016-10-19 4 views
1

내가 사용자의 기본 아바타 배경에 대해 일관된 색상을 설정하고 싶습니다 (반복 방법) 사용자의 이름과 RGB 색상을 생성합니다다음 규칙에 따라,

  • RGB 값을 여기서 각 숫자는 200보다 클 수 없습니다 (예 : 0에서 200 사이).
  • "John Smith"와 "John Smithy"와 같이 전체 이름을 사용하면 다른 색상을 나타냅니다.
  • 이름을 약간 변경하면 완전히 다른 색을 만들어야합니다.

나는이 라인을 따라 뭔가 생각 해요 :

  • 해시 3 등분
  • 구성 무언가에 이름이 세 부분의 각을 0을 사이 플로트에 정상화 1
  • 에 r, g 또는 b 값을 얻기 위해 200을 곱하십시오.

그러나 나는 그것에 대해 어떻게 해야할지 알 수 없습니다. 어떤 제안? 내가 이상적인 보석을 얻지 않고 그것을 할 수 있다면. MD5를 이미 사용하고 있습니다.

참고 : 이것은 보안상의 문제가 아니며 약간 재미 있습니다. 두 개의 다른 이름이 한 번에 같은 색을 생성하게되면 너무 중요하지는 않지만 일반적으로 좋을 것입니다. 색상 값을 최대한 다양하게 유지해야합니다.

답변

3

당신은을 통해 사용자 이름의 MD5 해시를 만들 수 :

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

을 그리고 0이 0..65535 값을 매핑 : 처음 세 개의 16 비트 정수 추출

require 'digest' 

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

..200 :

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

정확히 몇 년 전에 내가 한 일입니다. 불행히도 관리자 이름이 마음에 들지 않는 색상으로 매핑되었습니다 (분홍색 또는 밝은 주황색이었습니다). 거기에 상수를 도입하여 매핑에 영향을 주어야했습니다. –

+0

비슷한 방법으로 색상 레이블을 사용하고 있습니다. 그러나 임의의 RGB 값 대신에, 전적으로 무작위적인 색조와 밝기와 채도가 제한된 HSL을 사용하고 있습니다. 이렇게하면보다 일관된 색상을 얻을 수 있습니다. – Stefan

+0

@Stefan 좋은 생각입니다. 감사합니다. –

관련 문제