Ruby,生成一个随机的十六进制颜色

Ruby,生成一个随机的十六进制颜色,ruby,Ruby,如何使用ruby生成随机十六进制颜色?您可以独立生成每个组件: r = rand(255).to_s(16) g = rand(255).to_s(16) b = rand(255).to_s(16) r, g, b = [r, g, b].map { |s| if s.size == 1 then '0' + s else s end } color = r + g + b # => e.g. "09f5ab" 这里有一个方法: colour = "%06x" % (ra

如何使用ruby生成随机十六进制颜色?

您可以独立生成每个组件:

r = rand(255).to_s(16)
g = rand(255).to_s(16)
b = rand(255).to_s(16)

r, g, b = [r, g, b].map { |s| if s.size == 1 then '0' + s else s end }

color = r + g + b      # => e.g. "09f5ab"
这里有一个方法:

colour = "%06x" % (rand * 0xffffff)
SecureRandom
模块是Ruby标准库的一部分

require 'securerandom'
它是在Rails中自动加载的,但如果您使用的是Rails 3.0或更低版本,则需要使用

ActiveSupport::SecureRandom.hex(3)

一个带有
拆包的衬里
Random.new.bytes(3).解包(“H*”[0]

自从ruby 2.6.0以来,您可以做得更短:
Random.bytes(3).unpack1('H*')
您还可以执行以下操作:

colour = '#%X%X%X' % 3.times.map{ rand(255) }
一些更新:

或者,如果要冻结任何颜色:

class RandomColor
  def self.get_random
    rand(255)
  end

  def self.color_hex(options = {})
    default = { red: get_random, green: get_random, blue: get_random }
    options = default.merge(options)
    '#%X%X%X' % options.values
  end
end
然后


这是相当多的自定义,但Jeremy的解决方案要简洁得多。对于任意字节长度(替换3 w/字节数):
”。点击{s | 3.times{s,但这仍然是一种很酷的方式,竖起大拇指以确保可读性。您应该更改为
兰德(256)
,因为此当前方法将最浅的颜色限制为
#fefefe
(可输出的最大值
rand(255)
为254)。有人能解释一下吗(尤其是“%06x”?on字符串使用该字符串作为参数的格式规范。“%06x”表示:将数字格式化为十六进制,6个字符(在本例中为数字)宽,0填充。@jeremy ruten,我必须将已接受的答案移到airled的答案上,请告诉我;)如果要使用此选项,您需要在十六进制前加上“#”。效果很好,只是不要忘记开头的哈希符号。喜欢这个:
Random.bytes(3)。unpack1('H*)
class RandomColor
  def self.get_random
    rand(255)
  end

  def self.color_hex(options = {})
    default = { red: get_random, green: get_random, blue: get_random }
    options = default.merge(options)
    '#%X%X%X' % options.values
  end
end
# full random colour

RandomColor.color_hex() => #299D3D
RandomColor.color_hex() => #C0E92D

# freeze any colour

RandomColor.color_hex(red: 100) => #644BD6
RandomColor.color_hex(red: 100) => #6488D9