【问题标题】:How to generate a color based on an alphanumeric string using Ruby?如何使用 Ruby 根据字母数字字符串生成颜色?
【发布时间】:2013-06-05 03:42:09
【问题描述】:

我希望“嘿,那里”之类的内容变成,例如,#316583

我希望将任意长度的字符串“归结”为十六进制颜色。我什至不知从何下手。

我在想,每个字符串的 MD5 散列是不同的 - 但是如何将该散列转换为十六进制颜色数字?

【问题讨论】:

    标签: ruby colors hex


    【解决方案1】:

    您可以将 md5 值修改为 2^24 并以十六进制形式打印结果,并在其前加上 # 号。

    这是一个没有 MD5 的坏方法,它在短字符串上给出非常低的值,但显示了这个想法:

    sprintf("#%06x", ("asdf".sum % (256*256*256)))
    

    输出:

    ruby-1.9.2-p290 :032 > sprintf("#%06x", ("asdf".sum % (256*256*256)))
     => "#00019e" 
    

    用 MD5 值替换 "asdf".each_byte.inject(:+),你应该很好!

    【讨论】:

    • String 有一个sum 方法,它可能比.each_byte.inject(:+) 更有用。
    • 只是仔细检查(信任但验证),是的,这更好。正在更新答案。
    【解决方案2】:

    你可以只取几个前几位数字:

    require 'digest/md5'
    color = Digest::MD5.hexdigest('My text')[0..5]
    

    【讨论】:

    • 我会写一个(稍微)更具声明性的Digest::MD5.hexdigest('My text')[0, 6],但除此之外,+1。
    猜你喜欢
    • 2017-05-06
    • 2020-10-22
    • 2012-09-29
    • 1970-01-01
    • 2022-01-04
    • 2021-04-05
    • 1970-01-01
    • 2016-12-21
    • 1970-01-01
    相关资源
    最近更新 更多