输入颜色名称时如何获取十六进制代码

时间:2019-07-11 10:08:24

标签: ruby colors hex

我正在制造电报机器人,我希望它能够针对颜色名称提供十六进制代码。我知道有很多rgb颜色,但是我也知道有一篇维基百科文章,其中包含已知的颜色名称和十六进制代码,如果我能够以json的形式获取页面,那将会有所帮助。另外,如果json表示十六进制代码=颜色名称,该如何反转呢?如何按值而不是名称进行搜索?

3 个答案:

答案 0 :(得分:2)

您可以编写自己的哈希,然后Hash#invert

color_to_hex = { red: 'ff0000', green: '00ff00', blue: '0000ff' }
hex_to_color = color_to_hex.invert

color_to_hex[:red] #=> "ff0000"
hex_to_color['00ff00'] #=> :green

或者不创建逆哈希:

colors_to_hex.key('00ff00') #=> :green

答案 1 :(得分:1)

您可以尝试以下操作:

color_mappings = { 'yellow' => 'ffff00', 'red' => 'ff0000', 'green' => '00ff00', 'blue' => '0000ff' }

哈希可以按如下方式反转:

inverted_color_mappings = color_mappings.invert

输出:

{
    "ffff00" => "yellow",
    "ff0000" => "red",
    "00ff00" => "green",
    "0000ff" => "blue"
}


pattern = 'fff'
inverted_color_mappings.select{ |k,v| k[pattern] }

输出:

{
    "ffff00" => "yellow"
}

答案 2 :(得分:0)

其他答案很好。但是,如果您正在寻找已经为您完成工作的宝石,请查看Color。其Color::CSS[]方法按名称查找颜色并返回Color :: RGB对象,该对象又具有hexhtml方法:

require "color"

aliceblue = Color::CSS["aliceblue"]
puts aliceblue.hex
# => f0f8ff
puts aliceblue.html
# => #f0f8ff

Color :: RGB也有一个by_hex静态方法,该方法将为给定的十六进制代码返回一个名为Color :: RGB的对象。 name方法返回名称(如果有的话):

require "color"

mystery_color = Color::RGB.by_hex("#ffefd5")
puts mystery_color.name
# => papayawhip

您可以在repl.it上看到它的运行情况:https://repl.it/@jrunning/EqualReasonableSpellchecker(如果第一次按下运行按钮时遇到错误,请再次点击它。repl.it有时在首次加载宝石时会遇到问题)