Class: Color::HSL
- Inherits:
-
Object
- Object
- Color::HSL
- Defined in:
- lib/gems/color-1.4.0/lib/color/hsl.rb
Overview
An HSL colour object. Internally, the hue (#h), saturation (#s), and luminosity/lightness (#l) values are dealt with as fractional values in the range 0..1.
Class Method Summary collapse
-
.from_fraction(h = 0.0, s = 0.0, l = 0.0) ⇒ Object
Creates an HSL colour object from fractional values 0..1.
Instance Method Summary collapse
-
#==(other) ⇒ Object
Compares the other colour to this one.
-
#brightness ⇒ Object
Returns the luminosity (#l) of the colour.
-
#css_hsl ⇒ Object
Present the colour as an HSL HTML/CSS colour string (e.g., “hsl(180, 25%, 35%)”).
-
#css_hsla ⇒ Object
Present the colour as an HSLA (with alpha) HTML/CSS colour string (e.g., “hsla(180, 25%, 35%, 1)”).
-
#css_rgb ⇒ Object
Present the colour as an RGB HTML/CSS colour string (e.g., “rgb(0%, 50%, 100%)”).
-
#css_rgba ⇒ Object
Present the colour as an RGBA (with alpha) HTML/CSS colour string (e.g., “rgb(0%, 50%, 100%, 1)”).
-
#h ⇒ Object
Returns the hue of the colour in the range 0.0 ..
-
#h=(hh) ⇒ Object
Sets the hue of the colour in the range 0.0 ..
-
#html ⇒ Object
Present the colour as an HTML/CSS colour string.
-
#hue ⇒ Object
Returns the hue of the colour in degrees.
-
#hue=(hh) ⇒ Object
Sets the hue of the colour in degrees.
-
#initialize(h = 0, s = 0, l = 0) ⇒ HSL
constructor
Creates an HSL colour object from the standard values of degrees and percentages (e.g., 145 deg, 30%, 50%).
- #inspect ⇒ Object
-
#l ⇒ Object
Returns the luminosity of the colour in the range 0.0 ..
-
#l=(ll) ⇒ Object
Sets the luminosity of the colour in the ragne 0.0 ..
-
#luminosity ⇒ Object
(also: #lightness)
Returns the percentage of luminosity of the colour.
-
#luminosity=(ll) ⇒ Object
(also: #lightness=)
Sets the percentage of luminosity of the colour.
-
#mix_with(color, mix_percent = 0.5) ⇒ Object
Mix the mask colour (which will be converted to an HSL colour) with the current colour at the stated mix percentage as a decimal value.
-
#s ⇒ Object
Returns the saturation of the colour in the range 0.0 ..
-
#s=(ss) ⇒ Object
Sets the saturation of the colour in the ragne 0.0 ..
-
#saturation ⇒ Object
Returns the percentage of saturation of the colour.
-
#saturation=(ss) ⇒ Object
Sets the percentage of saturation of the colour.
-
#to_cmyk ⇒ Object
Converts to RGB then CMYK.
- #to_greyscale ⇒ Object (also: #to_grayscale)
- #to_hsl ⇒ Object
-
#to_rgb(ignored = nil) ⇒ Object
Converting to HSL as adapted from Foley and Van-Dam from www.bobpowell.net/RGBHSB.htm.
-
#to_yiq ⇒ Object
Converts to RGB then YIQ.
Constructor Details
#initialize(h = 0, s = 0, l = 0) ⇒ HSL
Creates an HSL colour object from the standard values of degrees and percentages (e.g., 145 deg, 30%, 50%).
47 48 49 50 51 |
# File 'lib/gems/color-1.4.0/lib/color/hsl.rb', line 47 def initialize(h = 0, s = 0, l = 0) @h = h / 360.0 @s = s / 100.0 @l = l / 100.0 end |
Class Method Details
.from_fraction(h = 0.0, s = 0.0, l = 0.0) ⇒ Object
Creates an HSL colour object from fractional values 0..1.
21 22 23 24 25 26 27 |
# File 'lib/gems/color-1.4.0/lib/color/hsl.rb', line 21 def from_fraction(h = 0.0, s = 0.0, l = 0.0) colour = Color::HSL.new colour.h = h colour.s = s colour.l = l colour end |
Instance Method Details
#==(other) ⇒ Object
Compares the other colour to this one. The other colour will be converted to HSL before comparison, so the comparison between a HSL colour and a non-HSL colour will be approximate and based on the other colour’s #to_hsl conversion. If there is no #to_hsl conversion, this will raise an exception. This will report that two HSL values are equivalent if all component values are within Color::COLOR_TOLERANCE of each other.
37 38 39 40 41 42 43 |
# File 'lib/gems/color-1.4.0/lib/color/hsl.rb', line 37 def ==(other) other = other.to_hsl other.kind_of?(Color::HSL) and ((@h - other.h).abs <= Color::COLOR_TOLERANCE) and ((@s - other.s).abs <= Color::COLOR_TOLERANCE) and ((@l - other.l).abs <= Color::COLOR_TOLERANCE) end |
#brightness ⇒ Object
Returns the luminosity (#l) of the colour.
137 138 139 |
# File 'lib/gems/color-1.4.0/lib/color/hsl.rb', line 137 def brightness @l end |
#css_hsl ⇒ Object
Present the colour as an HSL HTML/CSS colour string (e.g., “hsl(180, 25%, 35%)”).
74 75 76 |
# File 'lib/gems/color-1.4.0/lib/color/hsl.rb', line 74 def css_hsl "hsl(%3.2f, %3.2f%%, %3.2f%%)" % [ hue, saturation, luminosity ] end |
#css_hsla ⇒ Object
Present the colour as an HSLA (with alpha) HTML/CSS colour string (e.g., “hsla(180, 25%, 35%, 1)”).
80 81 82 |
# File 'lib/gems/color-1.4.0/lib/color/hsl.rb', line 80 def css_hsla "hsla(%3.2f, %3.2f%%, %3.2f%%, %3.2f)" % [ hue, saturation, luminosity, 1 ] end |
#css_rgb ⇒ Object
Present the colour as an RGB HTML/CSS colour string (e.g., “rgb(0%, 50%, 100%)”). Note that this will perform a #to_rgb operation using the default conversion formula.
61 62 63 |
# File 'lib/gems/color-1.4.0/lib/color/hsl.rb', line 61 def css_rgb to_rgb.css_rgb end |
#css_rgba ⇒ Object
Present the colour as an RGBA (with alpha) HTML/CSS colour string (e.g., “rgb(0%, 50%, 100%, 1)”). Note that this will perform a #to_rgb operation using the default conversion formula.
68 69 70 |
# File 'lib/gems/color-1.4.0/lib/color/hsl.rb', line 68 def css_rgba to_rgb.css_rgba end |
#h ⇒ Object
Returns the hue of the colour in the range 0.0 .. 1.0.
150 151 152 |
# File 'lib/gems/color-1.4.0/lib/color/hsl.rb', line 150 def h @h end |
#h=(hh) ⇒ Object
Sets the hue of the colour in the range 0.0 .. 1.0.
164 165 166 |
# File 'lib/gems/color-1.4.0/lib/color/hsl.rb', line 164 def h=(hh) @h = Color.normalize(hh) end |
#html ⇒ Object
Present the colour as an HTML/CSS colour string.
54 55 56 |
# File 'lib/gems/color-1.4.0/lib/color/hsl.rb', line 54 def html to_rgb.html end |
#hue ⇒ Object
Returns the hue of the colour in degrees.
146 147 148 |
# File 'lib/gems/color-1.4.0/lib/color/hsl.rb', line 146 def hue @h * 360.0 end |
#hue=(hh) ⇒ Object
Sets the hue of the colour in degrees. Colour is perceived as a wheel, so values should be set properly even with negative degree values.
155 156 157 158 159 160 161 162 |
# File 'lib/gems/color-1.4.0/lib/color/hsl.rb', line 155 def hue=(hh) hh = hh / 360.0 hh += 1.0 if hh < 0.0 hh -= 1.0 if hh > 1.0 @h = Color.normalize(hh) end |
#inspect ⇒ Object
207 208 209 |
# File 'lib/gems/color-1.4.0/lib/color/hsl.rb', line 207 def inspect "HSL [%.2f deg, %.2f%%, %.2f%%]" % [ hue, saturation, luminosity ] end |
#l ⇒ Object
Returns the luminosity of the colour in the range 0.0 .. 1.0.
190 191 192 |
# File 'lib/gems/color-1.4.0/lib/color/hsl.rb', line 190 def l @l end |
#l=(ll) ⇒ Object
Sets the luminosity of the colour in the ragne 0.0 .. 1.0.
199 200 201 |
# File 'lib/gems/color-1.4.0/lib/color/hsl.rb', line 199 def l=(ll) @l = Color.normalize(ll) end |
#luminosity ⇒ Object Also known as: lightness
Returns the percentage of luminosity of the colour.
185 186 187 |
# File 'lib/gems/color-1.4.0/lib/color/hsl.rb', line 185 def luminosity @l * 100.0 end |
#luminosity=(ll) ⇒ Object Also known as: lightness=
Sets the percentage of luminosity of the colour.
194 195 196 |
# File 'lib/gems/color-1.4.0/lib/color/hsl.rb', line 194 def luminosity=(ll) @l = Color.normalize(ll / 100.0) end |
#mix_with(color, mix_percent = 0.5) ⇒ Object
Mix the mask colour (which will be converted to an HSL colour) with the current colour at the stated mix percentage as a decimal value.
- NOTE
-
This differs from Color::RGB#mix_with.
215 216 217 218 219 220 221 222 |
# File 'lib/gems/color-1.4.0/lib/color/hsl.rb', line 215 def mix_with(color, mix_percent = 0.5) color = color.to_hsl _h = ((color.h - self.h) * mix_percent) + self.h _s = ((color.s - self.s) * mix_percent) + self.s _l = ((color.l - self.l) * mix_percent) + self.l self.class.from_fraction(_h, _s, _l) end |
#s ⇒ Object
Returns the saturation of the colour in the range 0.0 .. 1.0.
172 173 174 |
# File 'lib/gems/color-1.4.0/lib/color/hsl.rb', line 172 def s @s end |
#s=(ss) ⇒ Object
Sets the saturation of the colour in the ragne 0.0 .. 1.0.
180 181 182 |
# File 'lib/gems/color-1.4.0/lib/color/hsl.rb', line 180 def s=(ss) @s = Color.normalize(ss) end |
#saturation ⇒ Object
Returns the percentage of saturation of the colour.
168 169 170 |
# File 'lib/gems/color-1.4.0/lib/color/hsl.rb', line 168 def saturation @s * 100.0 end |
#saturation=(ss) ⇒ Object
Sets the percentage of saturation of the colour.
176 177 178 |
# File 'lib/gems/color-1.4.0/lib/color/hsl.rb', line 176 def saturation=(ss) @s = Color.normalize(ss / 100.0) end |
#to_cmyk ⇒ Object
Converts to RGB then CMYK.
132 133 134 |
# File 'lib/gems/color-1.4.0/lib/color/hsl.rb', line 132 def to_cmyk to_rgb.to_cmyk end |
#to_greyscale ⇒ Object Also known as: to_grayscale
140 141 142 |
# File 'lib/gems/color-1.4.0/lib/color/hsl.rb', line 140 def to_greyscale Color::GrayScale.from_fraction(@l) end |
#to_hsl ⇒ Object
203 204 205 |
# File 'lib/gems/color-1.4.0/lib/color/hsl.rb', line 203 def to_hsl self end |
#to_rgb(ignored = nil) ⇒ Object
Converting to HSL as adapted from Foley and Van-Dam from www.bobpowell.net/RGBHSB.htm.
NOTE:
-
If the colour’s luminosity is near zero, the colour is always black.
-
If the colour’s luminosity is near one, the colour is always white.
-
If the colour’s saturation is near zero, the colour is always a shade of grey and is based only on the luminosity of the colour.
93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 |
# File 'lib/gems/color-1.4.0/lib/color/hsl.rb', line 93 def to_rgb(ignored = nil) return Color::RGB.new if Color.near_zero_or_less?(@l) return Color::RGB.new(0xff, 0xff, 0xff) if Color.near_one_or_more?(@l) return Color::RGB.from_fraction(@l, @l, @l) if Color.near_zero?(@s) # Is the value less than 0.5? if Color.near_zero_or_less?(@l - 0.5) tmp2 = @l * (1.0 + @s.to_f) else tmp2 = @l + @s - (@l * @s.to_f) end tmp1 = 2.0 * @l - tmp2 tmp3 = [ @h + (1.0 / 3.0), @h, @h - (1.0 / 3.0) ] rgb = tmp3.map { |hue| hue += 1.0 if Color.near_zero_or_less?(hue) hue -= 1.0 if Color.near_one_or_more?(hue) if Color.near_zero_or_less?((6.0 * hue) - 1.0) tmp1 + ((tmp2 - tmp1) * hue * 6.0) elsif Color.near_zero_or_less?((2.0 * hue) - 1.0) tmp2 elsif Color.near_zero_or_less?((3.0 * hue) - 2.0) tmp1 + (tmp2 - tmp1) * ((2 / 3.0) - hue) * 6.0 else tmp1 end } Color::RGB.from_fraction(*rgb) end |
#to_yiq ⇒ Object
Converts to RGB then YIQ.
127 128 129 |
# File 'lib/gems/color-1.4.0/lib/color/hsl.rb', line 127 def to_yiq to_rgb.to_yiq end |