簡體   English   中英

從用戶名稱生成rgb顏色(以可重復的方式)

[英]Generate an rgb color from a user's name (in a repeatable way)

我想根據以下規則為用戶的默認頭像背景設置一致的顏色:

  • rgb值,其中每個數字不能高於200(即0到200之間)
  • 使用全名,例如“John Smith”和“John Smithy”會給出不同的顏色。
  • 對名稱的小改動應該會產生完全不同的顏色。

我正在考慮這些方面的事情:

  • 將名稱哈希為由三個相等部分組成的東西
  • 取三個部分中的每一個並將其標准化為0到1之間的浮點數
  • 將這些乘以200得到r,g或b值。

但我無法弄清楚如何去做。 有什么建議么? 如果我能做到這一點而沒有得到任何理想的額外寶石。 我已經使用MD5進行一些散列。

注意:這不是一個安全問題,它只是一個有趣的,所以如果兩個不同的名稱最終產生相同的顏色偶爾它並不重要,但通常它會很好有顏色價值盡可能多變。

您可以通過以下方式構建用戶名的MD5哈希:

require 'digest'

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

提取前三個16位整數:

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

並將這些0..65535值映射到0..200:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM