Ruby で CSS のカラー指定を RGB 値の配列に変換する

スタイルシートのカラー指定文字列を 3 要素の RGB 値の配列として取得する方法のメモ書き。逆変換のメソッドもあり。

css.rb

#
# Ruby CSS Color Module
#
module ColorUtil
  def get_rgb(value)
    if value =~ /^#?([a-fA-F0-9]+)$/
      c = $1
      if c.length == 3
        return Array.new(3) { |i| (c[i,1] * 2).hex }
      elsif c.length == 6
        return [ c[0,2].hex, c[2,2].hex, c[4,2].hex ]
      end
    end
    raise "format error"
  end
  
  def get_value(rgb)
    c = "#"
    rgb.each { |x| c += format("%02x", x) }
    return c
  end
end

サンプル

$ irb
irb(main):001:0> require 'css'
=> true
irb(main):002:0> include ColorUtil
=> Object
irb(main):003:0> get_rgb("000")
=> [0, 0, 0]
irb(main):004:0> get_rgb("#00ddff)"
irb(main):005:1> )
=> nil
irb(main):006:0> get_rgb("#00ddff")
=> [0, 221, 255]
irb(main):007:0> get_rgb("#999")
=> [153, 153, 153]
irb(main):008:0> get_value([153,153,153])
=> "#999999"
irb(main):009:0> get_value([255, 255, 0])
=> "#ffff00"