class Color::Palette::Gimp
A class that can read a GIMP (GNU Image Manipulation Program) palette file and provide a Hash-like interface to the contents. GIMP colour palettes are RGB values only.
Because two or more entries in a GIMP palette may have the same name, all named entries are returned as an array.
pal = Color::Palette::Gimp.from_file(my_gimp_palette) pal[0] => Color::RGB<...> pal["white"] => [ Color::RGB<...> ] pal["unknown"] => [ Color::RGB<...>, Color::RGB<...>, ... ]
GIMP Palettes are always indexable by insertion order (an integer key).
Attributes
name[R]
Public Class Methods
from_file(filename)
click to toggle source
Create a GIMP palette object from the named file.
# File lib/color/palette/gimp.rb, line 32 def from_file(filename) File.open(filename, "rb") { |io| Color::Palette::Gimp.from_io(io) } end
from_io(io)
click to toggle source
Create a GIMP palette object from the provided IO.
# File lib/color/palette/gimp.rb, line 37 def from_io(io) Color::Palette::Gimp.new(io.read) end
new(palette)
click to toggle source
Create a new GIMP palette.
# File lib/color/palette/gimp.rb, line 43 def initialize(palette) @colors = [] @names = {} @valid = false @name = "(unnamed)" index = 0 palette.split($/).each do |line| line.chomp! line.gsub!(/\s*#.*\Z/, '') next if line.empty? if line =~ /\AGIMP Palette\Z/ @valid = true next end info = /(\w+):\s(.*$)/.match(line) if info @name = info.captures[1] if info.captures[0] =~ /name/i next end line.gsub!(/^\s+/, '') data = line.split(/\s+/, 4) name = data.pop.strip data.map! { |el| el.to_i } color = Color::RGB.new(*data) @colors[index] = color @names[name] ||= [] @names[name] << color index += 1 end end
Public Instance Methods
[](key)
click to toggle source
# File lib/color/palette/gimp.rb, line 83 def [](key) if key.kind_of?(Numeric) @colors[key] else @names[key] end end
each() { |el| ... }
click to toggle source
Loops through each colour.
# File lib/color/palette/gimp.rb, line 92 def each @colors.each { |el| yield el } end
each_name() { |color_name, color_set| ... }
click to toggle source
Loops through each named colour set.
# File lib/color/palette/gimp.rb, line 97 def each_name #:yields color_name, color_set:# @names.each { |color_name, color_set| yield color_name, color_set } end
valid?()
click to toggle source
Returns true if this is believed to be a valid GIMP palette.
# File lib/color/palette/gimp.rb, line 102 def valid? @valid end