【问题标题】:How could I get a hex code when I give a color name当我给出颜色名称时,我怎么能得到一个十六进制代码
【发布时间】:2019-11-21 00:42:00
【问题描述】:

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

【问题讨论】:

  • 我认为您可以为此找到 API,或者使用互联网信息自己创建一个巨大的哈希常量键值对。这些对我来说似乎是最简单的解决方案

标签: ruby colors hex


【解决方案1】:

其他答案都很好。但是,如果您正在寻找已经为您完成工作的宝石,请查看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 有时在第一次加载宝石时会遇到问题。)

【讨论】:

  • 谢谢!如果询问的颜色不是有效名称,机器人会死吗?我想是这样?我怎样才能防止这种情况发生?
  • 如果你给Color::CSS[]一个无效的名字,它会返回nil,所以你需要确保处理它。如何做到这一点取决于您的用例。
【解决方案2】:

您可以尝试以下操作:

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"
}

【讨论】:

    【解决方案3】:

    你可以编写自己的哈希然后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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-10-02
      • 2012-03-30
      • 2011-01-28
      • 2015-04-12
      • 2011-10-25
      • 1970-01-01
      相关资源
      最近更新 更多