kodachroma 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/LICENSE.txt +20 -0
- data/README.org +401 -0
- data/lib/kodachroma/color/attributes.rb +59 -0
- data/lib/kodachroma/color/modifiers.rb +124 -0
- data/lib/kodachroma/color/serializers.rb +184 -0
- data/lib/kodachroma/color.rb +112 -0
- data/lib/kodachroma/color_modes.rb +55 -0
- data/lib/kodachroma/converters/base.rb +34 -0
- data/lib/kodachroma/converters/hsl_converter.rb +55 -0
- data/lib/kodachroma/converters/hsv_converter.rb +49 -0
- data/lib/kodachroma/converters/rgb_converter.rb +72 -0
- data/lib/kodachroma/errors.rb +8 -0
- data/lib/kodachroma/harmonies.rb +139 -0
- data/lib/kodachroma/helpers/bounders.rb +50 -0
- data/lib/kodachroma/palette_builder.rb +80 -0
- data/lib/kodachroma/rgb_generator/base.rb +10 -0
- data/lib/kodachroma/rgb_generator/from_hex_string_values.rb +63 -0
- data/lib/kodachroma/rgb_generator/from_hsl.rb +19 -0
- data/lib/kodachroma/rgb_generator/from_hsl_values.rb +25 -0
- data/lib/kodachroma/rgb_generator/from_hsv.rb +19 -0
- data/lib/kodachroma/rgb_generator/from_hsv_values.rb +25 -0
- data/lib/kodachroma/rgb_generator/from_rgb.rb +19 -0
- data/lib/kodachroma/rgb_generator/from_rgb_values.rb +27 -0
- data/lib/kodachroma/rgb_generator/from_string.rb +89 -0
- data/lib/kodachroma/rgb_generator.rb +38 -0
- data/lib/kodachroma/version.rb +4 -0
- data/lib/kodachroma.rb +130 -0
- data/lib/support/named_colors.yml +149 -0
- metadata +186 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 98d99d23181a6e8fb5b66b9cc689fff97881ab9cc9bf2ae455da8b85c915f6bb
|
4
|
+
data.tar.gz: 05f09a107f88e5938173309b7a84d81b8930940419729cd152e97c11fb5b093f
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 88ab6243470b9a773de8b37f12b067863cdf7cc0aa48f47e85b69f928280ab9a2394709ae28286ffd9eeb6b262407c75c724faeca4ffb6cf27efc0aa2927f1d1
|
7
|
+
data.tar.gz: 4df903a5512b146f9da7f564db65b5f5d441bb891a664734701027a437eda3cd3b1efbaf8e86e2deb97805935e7c04c22ad49c59c7ab36ed20a2092473119fff
|
data/LICENSE.txt
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
The MIT License (MIT)
|
2
|
+
|
3
|
+
Copyright © 2021 Jeremy Fairbank and Evan Lecklider
|
4
|
+
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy of
|
6
|
+
this software and associated documentation files (the “Software”), to deal in
|
7
|
+
the Software without restriction, including without limitation the rights to
|
8
|
+
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
|
9
|
+
the Software, and to permit persons to whom the Software is furnished to do so,
|
10
|
+
subject to the following conditions:
|
11
|
+
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
13
|
+
copies or substantial portions of the Software.
|
14
|
+
|
15
|
+
THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
17
|
+
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
|
18
|
+
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
|
19
|
+
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
20
|
+
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README.org
ADDED
@@ -0,0 +1,401 @@
|
|
1
|
+
* Kodachroma
|
2
|
+
|
3
|
+
[[https://badge.fury.io/rb/kodachroma][https://badge.fury.io/rb/kodachroma.svg]]
|
4
|
+
|
5
|
+
Kodachroma is a color manipulation and palette generation library. It aims to be
|
6
|
+
a maintained fork of the excellent [[https://github.com/jfairbank/chroma][Chroma]]. Many thanks to [[https://github.com/jfairbank][Jeremy Fairbank]] for
|
7
|
+
developing Chroma.
|
8
|
+
|
9
|
+
From Chroma's own [[https://github.com/jfairbank/chroma/blob/master/README.md][README]]:
|
10
|
+
|
11
|
+
#+begin_quote
|
12
|
+
It is heavily inspired by and a very close Ruby port of the [[https://bgrins.github.io/TinyColor/][tinycolor.js]]
|
13
|
+
library. Many thanks to [[http://www.briangrinstead.com/blog/][Brian Grinstead]] for his hard work on that library.
|
14
|
+
#+end_quote
|
15
|
+
|
16
|
+
** Installation
|
17
|
+
|
18
|
+
Add this line to your application's Gemfile:
|
19
|
+
|
20
|
+
#+BEGIN_SRC ruby
|
21
|
+
gem 'kodachroma'
|
22
|
+
#+END_SRC
|
23
|
+
|
24
|
+
And then execute:
|
25
|
+
|
26
|
+
#+begin_src sh
|
27
|
+
bundle
|
28
|
+
#+end_src
|
29
|
+
|
30
|
+
Or install it yourself as:
|
31
|
+
|
32
|
+
#+begin_src sh
|
33
|
+
gem install kodachroma
|
34
|
+
#+end_src
|
35
|
+
|
36
|
+
** Differences from Chroma
|
37
|
+
|
38
|
+
The string extension that defined =String#paint= has been removed. If you would
|
39
|
+
like to replicate that behavior using Kodachroma, the following should do the
|
40
|
+
trick.
|
41
|
+
|
42
|
+
#+begin_src ruby
|
43
|
+
class String
|
44
|
+
# Creates {Kodachroma::Color} directly from a string representing a color.
|
45
|
+
#
|
46
|
+
# @example
|
47
|
+
# 'red'.paint
|
48
|
+
# '#f00'.paint
|
49
|
+
# '#ff0000'.paint
|
50
|
+
# 'rgb(255, 0, 0)'.paint
|
51
|
+
# 'hsl(0, 100%, 50%)'.paint
|
52
|
+
# 'hsv(0, 100%, 100%)'.paint
|
53
|
+
#
|
54
|
+
# @return [Kodachroma::Color]
|
55
|
+
def paint
|
56
|
+
Kodachroma.paint(self)
|
57
|
+
end
|
58
|
+
end
|
59
|
+
#+end_src
|
60
|
+
|
61
|
+
** Creating Colors
|
62
|
+
|
63
|
+
Colors are created via the =Kodachroma.paint= method. It expects any one of
|
64
|
+
many possible color formats as a string, including names, hexadecimal,
|
65
|
+
rgb, hsl, and hsv.
|
66
|
+
|
67
|
+
#+BEGIN_SRC ruby
|
68
|
+
Kodachroma.paint 'red' # named colors
|
69
|
+
Kodachroma.paint '#00ff00' # 6 character hexadecimal
|
70
|
+
Kodachroma.paint '#00f' # 3 character hexadecimal
|
71
|
+
Kodachroma.paint 'rgb(255, 255, 0)' # rgb
|
72
|
+
Kodachroma.paint 'rgba(255, 255, 0, 0.5)' # rgba
|
73
|
+
Kodachroma.paint 'hsl(60, 100%, 50%)' # hsl with percentages
|
74
|
+
Kodachroma.paint 'hsl(60, 1, 0.5)' # hsl with decimals
|
75
|
+
Kodachroma.paint 'hsla(60, 100%, 50%, 0.5)' # hsla
|
76
|
+
Kodachroma.paint 'hsv(60, 100%, 50%)' # hsv with percentages
|
77
|
+
Kodachroma.paint 'hsv(60, 1, 0.5)' # hsv with decimals
|
78
|
+
Kodachroma.paint 'hsva(60, 100%, 50%, 0.75)' # hsva
|
79
|
+
#+END_SRC
|
80
|
+
|
81
|
+
** Motivation
|
82
|
+
|
83
|
+
Kodachroma's major strength is manipulating colors and generating color
|
84
|
+
palettes, which allows you to easily generate dynamic colors, dynamic
|
85
|
+
themes for a web application, and more.
|
86
|
+
|
87
|
+
** Color manipulation
|
88
|
+
|
89
|
+
*** Lighten
|
90
|
+
|
91
|
+
Lighten the color by a given amount. Defaults to 10.
|
92
|
+
|
93
|
+
#+BEGIN_SRC ruby
|
94
|
+
Kodachroma.paint('red').lighten #=> #ff3333
|
95
|
+
Kodachroma.paint('red').lighten(20) #=> #ff6666
|
96
|
+
#+END_SRC
|
97
|
+
|
98
|
+
*** Brighten
|
99
|
+
|
100
|
+
Brighten the color by a given amount. Defaults to 10.
|
101
|
+
|
102
|
+
#+BEGIN_SRC ruby
|
103
|
+
Kodachroma.paint('red').brighten #=> #ff1a1a
|
104
|
+
Kodachroma.paint('red').brighten(20) #=> #ff3333
|
105
|
+
#+END_SRC
|
106
|
+
|
107
|
+
*** Darken
|
108
|
+
|
109
|
+
Darken the color by a given amount. Defaults to 10.
|
110
|
+
|
111
|
+
#+BEGIN_SRC ruby
|
112
|
+
Kodachroma.paint('red').darken #=> #cc0000
|
113
|
+
Kodachroma.paint('red').darken(20) #=> #990000
|
114
|
+
#+END_SRC
|
115
|
+
|
116
|
+
*** Desaturate
|
117
|
+
|
118
|
+
Desaturate the color by a given amount. Defaults to 10.
|
119
|
+
|
120
|
+
#+BEGIN_SRC ruby
|
121
|
+
Kodachroma.paint('red').desaturate #=> #f20d0d
|
122
|
+
Kodachroma.paint('red').desaturate(20) #=> #e61919
|
123
|
+
#+END_SRC
|
124
|
+
|
125
|
+
*** Saturate
|
126
|
+
|
127
|
+
Saturate the color by a given amount. Defaults to 10.
|
128
|
+
|
129
|
+
#+BEGIN_SRC ruby
|
130
|
+
Kodachroma.paint('#123').saturate #=> #0e2236
|
131
|
+
Kodachroma.paint('#123').saturate(20) #=> #0a223a
|
132
|
+
#+END_SRC
|
133
|
+
|
134
|
+
*** Grayscale
|
135
|
+
|
136
|
+
Convert the color to grayscale.
|
137
|
+
|
138
|
+
#+BEGIN_SRC ruby
|
139
|
+
Kodachroma.paint('green').grayscale #=> #404040
|
140
|
+
|
141
|
+
# greyscale is an alias
|
142
|
+
Kodachroma.paint('red').greyscale #=> #808080
|
143
|
+
#+END_SRC
|
144
|
+
|
145
|
+
*** Opacity
|
146
|
+
|
147
|
+
Set the opacity of the color to a given amount.
|
148
|
+
|
149
|
+
#+BEGIN_SRC ruby
|
150
|
+
Kodachroma.paint('red').opacity(0.3) #=> #ff0000
|
151
|
+
Kodachroma.paint('red').opacity(0.3).to_rgb #=> 'rgba(255, 0, 0, 0.3)'
|
152
|
+
#+END_SRC
|
153
|
+
|
154
|
+
*** Spin
|
155
|
+
|
156
|
+
Spin a given amount in degrees around the hue wheel.
|
157
|
+
|
158
|
+
#+BEGIN_SRC ruby
|
159
|
+
Kodachroma.paint('red').spin(30) #=> #ff8000
|
160
|
+
Kodachroma.paint('red').spin(60) #=> yellow
|
161
|
+
Kodachroma.paint('red').spin(90) #=> #80ff00
|
162
|
+
#+END_SRC
|
163
|
+
|
164
|
+
** Generating palettes
|
165
|
+
|
166
|
+
Kodachroma's most powerful feature is palette generation. You can use the
|
167
|
+
default palettes available or even create your own custom palettes.
|
168
|
+
|
169
|
+
Palette methods are available via =Color#palette= and by default output
|
170
|
+
an array of colors. If you want the underlying color strings, you can
|
171
|
+
pass in the desired format via the =:as= option.
|
172
|
+
|
173
|
+
**** Available Formats
|
174
|
+
|
175
|
+
- name
|
176
|
+
- rgb
|
177
|
+
- hex
|
178
|
+
- hex6 (alias for hex)
|
179
|
+
- hex3
|
180
|
+
- hex8 (includes the alpha value in the highest order byte)
|
181
|
+
- hsl
|
182
|
+
- hsv
|
183
|
+
|
184
|
+
**** Complement
|
185
|
+
|
186
|
+
Generate a complement palette.
|
187
|
+
|
188
|
+
#+BEGIN_SRC ruby
|
189
|
+
Kodachroma.paint('red').palette.complement #=> [red, cyan]
|
190
|
+
Kodachroma.paint('red').palette.complement(as: :name) #=> ['red', 'cyan']
|
191
|
+
Kodachroma.paint('red').palette.complement(as: :hex) #=> ['#ff0000', '#00ffff']
|
192
|
+
#+END_SRC
|
193
|
+
|
194
|
+
**** Triad
|
195
|
+
|
196
|
+
Generate a triad palette.
|
197
|
+
|
198
|
+
#+BEGIN_SRC ruby
|
199
|
+
Kodachroma.paint('red').palette.triad #=> [red, lime, blue]
|
200
|
+
Kodachroma.paint('red').palette.triad(as: :name) #=> ['red', 'lime', 'blue']
|
201
|
+
Kodachroma.paint('red').palette.triad(as: :hex) #=> ['#ff0000', '#00ff00', '#0000ff']
|
202
|
+
#+END_SRC
|
203
|
+
|
204
|
+
**** Tetrad
|
205
|
+
|
206
|
+
Generate a tetrad palette.
|
207
|
+
|
208
|
+
#+BEGIN_SRC ruby
|
209
|
+
Kodachroma.paint('red').palette.tetrad
|
210
|
+
#=> [red, #80ff00, cyan, #7f00ff]
|
211
|
+
|
212
|
+
Kodachroma.paint('red').palette.tetrad(as: :name)
|
213
|
+
#=> ['red', '#80ff00', 'cyan', '#7f00ff']
|
214
|
+
|
215
|
+
Kodachroma.paint('red').palette.tetrad(as: :hex)
|
216
|
+
#=> ['#ff0000', '#80ff00', '#00ffff', '#7f00ff']
|
217
|
+
#+END_SRC
|
218
|
+
|
219
|
+
**** Split complement
|
220
|
+
|
221
|
+
Generate a split complement palette.
|
222
|
+
|
223
|
+
#+BEGIN_SRC ruby
|
224
|
+
Kodachroma.paint('red').palette.split_complement
|
225
|
+
#=> [red, #ccff00, #0066ff]
|
226
|
+
|
227
|
+
Kodachroma.paint('red').palette.split_complement(as: :name)
|
228
|
+
#=> ['red', '#ccff00', '#0066ff']
|
229
|
+
|
230
|
+
Kodachroma.paint('red').palette.split_complement(as: :hex)
|
231
|
+
#=> ['#ff0000', '#ccff00', '#0066ff']
|
232
|
+
#+END_SRC
|
233
|
+
|
234
|
+
**** Analogous
|
235
|
+
|
236
|
+
Generate an analogous palette. Pass in a =:size= option to specify the
|
237
|
+
size of the palette (defaults to 6). Pass in a =:slice_by= option to
|
238
|
+
specify the angle size to slice into the hue wheel (defaults to 30
|
239
|
+
degrees).
|
240
|
+
|
241
|
+
#+BEGIN_SRC ruby
|
242
|
+
Kodachroma.paint('red').palette.analogous
|
243
|
+
#=> [red, #ff0066, #ff0033, red, #ff3300, #ff6600]
|
244
|
+
|
245
|
+
Kodachroma.paint('red').palette.analogous(as: :hex)
|
246
|
+
#=> ['#f00', '#f06', '#f03', '#f00', '#f30', '#f60']
|
247
|
+
|
248
|
+
Kodachroma.paint('red').palette.analogous(size: 3)
|
249
|
+
#=> [red, #ff001a, #ff1a00]
|
250
|
+
|
251
|
+
Kodachroma.paint('red').palette.analogous(size: 3, slice_by: 60)
|
252
|
+
#=> [red, #ff000d, #ff0d00]
|
253
|
+
#+END_SRC
|
254
|
+
|
255
|
+
**** Monochromatic
|
256
|
+
|
257
|
+
Generate a monochromatic palette. Pass in a =:size= option to specify
|
258
|
+
the size of the palette (defaults to 6).
|
259
|
+
|
260
|
+
#+BEGIN_SRC ruby
|
261
|
+
Kodachroma.paint('red').palette.monochromatic
|
262
|
+
#=> [red, #2a0000, #550000, maroon, #aa0000, #d40000]
|
263
|
+
|
264
|
+
Kodachroma.paint('red').palette.monochromatic(as: :hex)
|
265
|
+
#=> ['#ff0000', '#2a0000', '#550000', '#800000', '#aa0000', '#d40000']
|
266
|
+
|
267
|
+
Kodachroma.paint('red').palette.monochromatic(size: 3)
|
268
|
+
#=> [red, #550000, #aa0000]
|
269
|
+
#+END_SRC
|
270
|
+
|
271
|
+
** Defining custom palettes
|
272
|
+
|
273
|
+
Kodachroma allows you to define your own custom palettes if the default ones
|
274
|
+
aren't all you're looking for. You can define a custom palette by
|
275
|
+
calling =Kodachroma.define_palette=, passing in a palette name and
|
276
|
+
definition block. The definition block uses the color manipulation
|
277
|
+
methods (i.e. =lighten=, =spin=, etc.) as its DSL. Every DSL call
|
278
|
+
defines a new color that will be included in the palette. Your seed
|
279
|
+
color (i.e. the color from which you call the palette method) will be
|
280
|
+
included as the first color in your palette too.
|
281
|
+
|
282
|
+
#+BEGIN_SRC ruby
|
283
|
+
red = Kodachroma.paint('red')
|
284
|
+
|
285
|
+
red.palette.respond_to? :my_palette #=> false
|
286
|
+
|
287
|
+
# Define a palette with 5 colors including the seed color
|
288
|
+
Kodachroma.define_palette :my_palette do
|
289
|
+
spin 60
|
290
|
+
spin 180
|
291
|
+
spin(60).brighten(20) # chain calls as well
|
292
|
+
greyscale
|
293
|
+
end
|
294
|
+
|
295
|
+
red.palette.respond_to? :my_palette #=> true
|
296
|
+
|
297
|
+
red.palette.my_palette #=> [#ff0000 #ffff00 #00ffff #ffff33 #808080]
|
298
|
+
#+END_SRC
|
299
|
+
|
300
|
+
** Dynamic custom palettes
|
301
|
+
|
302
|
+
You can generate custom palettes on the fly too with
|
303
|
+
=Kodachroma::Color#custom_palette=.
|
304
|
+
|
305
|
+
#+BEGIN_SRC ruby
|
306
|
+
Kodachroma.paint('red').custom_palette do
|
307
|
+
spin 60
|
308
|
+
spin 180
|
309
|
+
end
|
310
|
+
|
311
|
+
#=> [red, yellow, cyan]
|
312
|
+
#+END_SRC
|
313
|
+
|
314
|
+
** Serializing colors
|
315
|
+
|
316
|
+
Colors offer several methods to output to different string color
|
317
|
+
[[#available-formats][formats]].
|
318
|
+
|
319
|
+
| Method | Description |
|
320
|
+
|-------------+--------------------------------------------------------------------------------------------------------------------|
|
321
|
+
| =to_hsv= | output to hsv string, outputs hsva if alpha < 1 |
|
322
|
+
| =to_hsl= | output to hsl string, outputs hsla if alpha < 1 |
|
323
|
+
| =to_hex= | output to hex string, optional argument allows 3-character hex output if possible |
|
324
|
+
| =to_hex8= | output to 8-character hex string with alpha value in the highest order byte |
|
325
|
+
| =to_rgb= | output to rgb string, outputs rgba if alpha < 1 |
|
326
|
+
| =to_name= | output to color name string if available, otherwise ='<unknown>'= or =to_hex= output based on optional arg value |
|
327
|
+
| =to_s= | output to the appropriate string format based on how the color was created, optional arg forces the format |
|
328
|
+
|
329
|
+
#+BEGIN_SRC ruby
|
330
|
+
# to_hsv
|
331
|
+
Kodachroma.paint('red').to_hsv #=> 'hsv(0, 100%, 100%)'
|
332
|
+
Kodachroma.paint('rgba(255, 0, 0, 0.5)').to_hsv #=> 'hsva(0, 100%, 100%, 0.5)'
|
333
|
+
|
334
|
+
# to_hsl
|
335
|
+
Kodachroma.paint('red').to_hsl #=> 'hsl(0, 100%, 50%)'
|
336
|
+
Kodachroma.paint('rgba(255, 0, 0, 0.5)').to_hsl #=> 'hsla(0, 100%, 50%, 0.5)'
|
337
|
+
|
338
|
+
# to_hex
|
339
|
+
Kodachroma.paint('red').to_hex #=> '#ff0000'
|
340
|
+
Kodachroma.paint('red').to_hex(true) #=> '#f00'
|
341
|
+
Kodachroma.paint('rgba(255, 0, 0, 0.5)').to_hex #=> '#ff0000'
|
342
|
+
Kodachroma.paint('red').to_hex #=> '#ffff0000'
|
343
|
+
Kodachroma.paint('rgba(255, 0, 0, 0.5)').to_hex #=> '#80ff0000'
|
344
|
+
|
345
|
+
# to_rgb
|
346
|
+
Kodachroma.paint('red').to_rgb #=> 'rgb(255, 0, 0)'
|
347
|
+
Kodachroma.paint('rgba(255, 0, 0, 0.5)').to_rgb #=> 'rgb(255, 0, 0, 0.5)'
|
348
|
+
|
349
|
+
# to_name
|
350
|
+
Kodachroma.paint('red').to_name #=> 'red'
|
351
|
+
Kodachroma.paint('#00f').to_name #=> 'blue'
|
352
|
+
Kodachroma.paint('rgba(255, 0, 0, 0.5)').to_name #=> '<unknown>'
|
353
|
+
Kodachroma.paint('#123').to_name(true) #=> '#112233'
|
354
|
+
|
355
|
+
# to_s
|
356
|
+
Kodachroma.paint('red').to_s #=> 'red'
|
357
|
+
Kodachroma.paint('rgb(255, 0, 0)').to_s #=> 'rgb(255, 0, 0)'
|
358
|
+
Kodachroma.paint('#f00').to_s #=> '#f00'
|
359
|
+
Kodachroma.paint('#80ff0000').to_s(:rgb) #=> 'rgba(255, 0, 0, 0.5)'
|
360
|
+
#+END_SRC
|
361
|
+
|
362
|
+
** Other methods
|
363
|
+
|
364
|
+
Colors also have a few other helper methods:
|
365
|
+
|
366
|
+
| Method | Description |
|
367
|
+
|----------------+----------------------------------------------------------|
|
368
|
+
| =dark?= | is the color dark? |
|
369
|
+
| =light?= | is the color light? |
|
370
|
+
| =alpha= | retrieve the alpha value |
|
371
|
+
| =brightness= | calculate the brightness as a number between 0 and 255 |
|
372
|
+
| =complement= | return the complementary color |
|
373
|
+
|
374
|
+
#+BEGIN_SRC ruby
|
375
|
+
# dark?
|
376
|
+
Kodachroma.paint('red').dark? #=> true
|
377
|
+
Kodachroma.paint('yellow').dark? #=> false
|
378
|
+
|
379
|
+
# light?
|
380
|
+
Kodachroma.paint('red').light? #=> false
|
381
|
+
Kodachroma.paint('yellow').light? #=> true
|
382
|
+
|
383
|
+
# alpha
|
384
|
+
Kodachroma.paint('red').alpha #=> 1.0
|
385
|
+
Kodachroma.paint('rgba(0, 0, 0, 0.5)').alpha #=> 0.5
|
386
|
+
|
387
|
+
# brightness
|
388
|
+
Kodachroma.paint('red').brightness #=> 76.245
|
389
|
+
Kodachroma.paint('yellow').brightness #=> 225.93
|
390
|
+
Kodachroma.paint('white').brightness #=> 255.0
|
391
|
+
Kodachroma.paint('black').brightness #=> 0.0
|
392
|
+
|
393
|
+
# complement
|
394
|
+
Kodachroma.paint('red').complement #=> cyan
|
395
|
+
#+END_SRC
|
396
|
+
|
397
|
+
** Trivia
|
398
|
+
|
399
|
+
The name "Kodachroma" is inspired by Paul Simon's lovely song "Kodachrome" and
|
400
|
+
my desire to keep "chroma" in the name of the gem so people searching for the
|
401
|
+
original gem might find this fork.
|
@@ -0,0 +1,59 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
module Kodachroma
|
3
|
+
class Color
|
4
|
+
# Attribute methods for {Color}.
|
5
|
+
module Attributes
|
6
|
+
attr_reader :format
|
7
|
+
|
8
|
+
# Determines if the color is dark.
|
9
|
+
#
|
10
|
+
# @example
|
11
|
+
# 'red'.paint.dark? #=> true
|
12
|
+
# 'yellow'.paint.dark? #=> false
|
13
|
+
#
|
14
|
+
# @return [true, false]
|
15
|
+
def dark?
|
16
|
+
brightness < 128
|
17
|
+
end
|
18
|
+
|
19
|
+
# Determines if the color is light.
|
20
|
+
#
|
21
|
+
# @example
|
22
|
+
# 'red'.paint.light? #=> false
|
23
|
+
# 'yellow'.paint.light? #=> true
|
24
|
+
#
|
25
|
+
# @return [true, false]
|
26
|
+
def light?
|
27
|
+
!dark?
|
28
|
+
end
|
29
|
+
|
30
|
+
# Returns the alpha channel value.
|
31
|
+
#
|
32
|
+
# @example
|
33
|
+
# 'red'.paint.alpha #=> 1.0
|
34
|
+
# 'rgba(0, 0, 0, 0.5)'.paint.alpha #=> 0.5
|
35
|
+
#
|
36
|
+
# @return [Float]
|
37
|
+
def alpha
|
38
|
+
@rgb.a
|
39
|
+
end
|
40
|
+
|
41
|
+
# Calculates the brightness.
|
42
|
+
#
|
43
|
+
# @example
|
44
|
+
# 'red'.paint.brightness #=> 76.245
|
45
|
+
# 'yellow'.paint.brightness #=> 225.93
|
46
|
+
#
|
47
|
+
# @return [Float]
|
48
|
+
def brightness
|
49
|
+
((@rgb.r * 299) + (@rgb.g * 587) + (@rgb.b * 114)) / 1000.0
|
50
|
+
end
|
51
|
+
|
52
|
+
private
|
53
|
+
|
54
|
+
def rounded_alpha
|
55
|
+
@rounded_alpha ||= (alpha * 100).round / 100.0
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|