Ruby, Generate a random hex color

后端 未结 5 554
眼角桃花
眼角桃花 2020-12-23 02:09

How can I generate a random hex color with ruby?

相关标签:
5条回答
  • 2020-12-23 02:18
    SecureRandom.hex(3)
    #=> "fef912"
    

    The SecureRandom module is part of Ruby's standard library

    require 'securerandom'
    

    It's autoloaded in Rails, but if you're using Rails 3.0 or lower, you'll need to use

    ActiveSupport::SecureRandom.hex(3)
    
    0 讨论(0)
  • 2020-12-23 02:18

    You can generate each component independently:

    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"
    
    0 讨论(0)
  • 2020-12-23 02:26

    also you can do this:

    colour = '#%X%X%X' % 3.times.map{ rand(255) }
    

    some updates:

    or if you want to freeze any color:

    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
    

    then

    # 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
    
    0 讨论(0)
  • 2020-12-23 02:33

    One-liner with unpack: Random.new.bytes(3).unpack("H*")[0]

    Since ruby 2.6.0 you can do it even shorter: Random.bytes(3).unpack1('H*')

    0 讨论(0)
  • 2020-12-23 02:34

    Here's one way:

    colour = "%06x" % (rand * 0xffffff)
    
    0 讨论(0)
提交回复
热议问题