module Color
Colour Management with Ruby¶ ↑
Constants
- COLOR_EPSILON
-
The maximum “resolution” for colour math; if any value is less than or equal to this value, it is treated as zero.
- COLOR_TOLERANCE
-
The tolerance for comparing the components of two colours. In general, colours are considered equal if all of their components are within this tolerance value of each other.
- COLOR_VERSION
- GreyScale
-
A colour object representing shades of grey. Used primarily in PDF document creation.
Public Class Methods
Source
# File lib/color.rb, line 92 def coerce(a, b) a.coerce(b) end
Coerces, if possible, the second given colour object to the first given colour object type. This will probably involve colour conversion and therefore a loss of fidelity.
Source
# File lib/color.rb, line 84 def equivalent?(a, b) return false unless a.kind_of?(Color) && b.kind_of?(Color) a.to_a.zip(a.coerce(b).to_a).all? { |(x, y)| near?(x, y) } end
Returns true
if the two colours are roughly equivalent. If colour conversions are required, this all conversions will be implemented using the default conversion mechanism.
Source
# File lib/color.rb, line 77 def near?(x, y) (x - y).abs <= Color::COLOR_TOLERANCE end
Returns true
if the two values provided are near each other.
Source
# File lib/color.rb, line 66 def near_one?(value) near_zero?(value - 1.0) end
Returns true
if the value is within COLOR_EPSILON
of one.
Source
# File lib/color.rb, line 72 def near_one_or_more?(value) (value > 1.0 or near_one?(value)) end
Returns true
if the value is within COLOR_EPSILON
of one or more than one.
Source
# File lib/color.rb, line 55 def near_zero?(value) (value.abs <= Color::COLOR_EPSILON) end
Returns true
if the value is less than COLOR_EPSILON
.
Source
# File lib/color.rb, line 61 def near_zero_or_less?(value) (value < 0.0 or near_zero?(value)) end
Returns true
if the value is within COLOR_EPSILON
of zero or less than zero.
Source
# File lib/color.rb, line 168 def new(values, mode = :rgb) warn "Color.new has been deprecated. Use Color::#{mode.to_s.upcase}.new instead." color = case mode when :hsl Color::HSL.new(*values) when :rgb values = [ values ].flatten if values.size == 1 Color::RGB.from_html(*values) else Color::RGB.new(*values) end when :cmyk Color::CMYK.new(*values) end color.to_hsl end
Provides a thin veneer over the Color
module to make it seem like this is Color
0.1.0 (a class) and not Color
1.4 (a module). This “constructor” will be removed in the future.
- mode = :hsl
-
values
must be an array of [ hue deg, sat %, lum % ]. AColor::HSL
object will be created. - mode = :rgb
-
values
will either be an HTML-style colour string or an array of [ red, green, blue ] (range 0 .. 255). AColor::RGB
object will be created. - mode = :cmyk
-
values
must be an array of [ cyan %, magenta %, yellow %, black % ]. AColor::CMYK
object will be created.
Source
# File lib/color.rb, line 97 def normalize(value) if near_zero_or_less? value 0.0 elsif near_one_or_more? value 1.0 else value end end
Normalizes the value to the range (0.0) .. (1.0).
Source
# File lib/color.rb, line 122 def normalize_byte(value) normalize_to_range(value, 0..255).to_i end
Normalize the value to the range (0) .. (255).
Source
# File lib/color.rb, line 109 def normalize_to_range(value, range) range = (range.end..range.begin) if (range.end < range.begin) if value <= range.begin range.begin elsif value >= range.end range.end else value end end
Normalizes the value to the specified range.
Source
# File lib/color.rb, line 128 def normalize_word(value) normalize_to_range(value, 0..65535).to_i end
Normalize the value to the range (0) .. (65535).
Public Instance Methods
Source
# File lib/color.rb, line 33 def ==(other) Color.equivalent?(self, other) end
Compares the other
colour to this one. The other
colour will be coerced to the same type as the current colour. Such converted colour comparisons will always be more approximate than non-converted comparisons.
If the other
colour cannot be coerced to the current colour class, a NoMethodError
exception will be raised.
All values are compared as floating-point values, so two colours will be reported equivalent if all component values are within COLOR_TOLERANCE
of each other.
Source
# File lib/color.rb, line 38 def name names.first end
The primary name for the colour.
Source
# File lib/color.rb, line 43 def names self.names = nil unless defined? @names @names end
All names for the colour.