color_lib 1.4.4

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: a1f04b55358a9cdc8a5c4fa32df79b152fd6b91e
4
+ data.tar.gz: 5972b46bd97e6f4a4d61951dee4c49726d2d7aa9
5
+ SHA512:
6
+ metadata.gz: ef2a082378edd5344546018019c90f1787a51b8c64d2242ca7758e06db1ab50d1252eff2dbd4450093e30deb914f6ce82aa2f01612c0585fc740f321df3e0168
7
+ data.tar.gz: e687268a86384904554f54bfb377db5dddd07b9b8a1d7a7b7f1ac778c71fa05b43a9061ac984e5de49c4b1d273747534cf06f94873f4c00a30c1ca1994868619
data/.gitignore ADDED
@@ -0,0 +1,22 @@
1
+ /.bundle/
2
+ /.yardoc
3
+ /Gemfile.lock
4
+ /_yardoc/
5
+ /coverage/
6
+ /doc/
7
+ /pkg/
8
+ /spec/reports/
9
+ /tmp/
10
+ *.bundle
11
+ *.so
12
+ *.o
13
+ *.a
14
+ mkmf.log
15
+ *.swp
16
+ html
17
+ doc
18
+ pkg
19
+ publish
20
+ coverage
21
+ coverage.info
22
+ type-lists
data/.travis.yml ADDED
@@ -0,0 +1,7 @@
1
+ language: ruby
2
+ rvm:
3
+ - 2.0.0
4
+ - 2.1.5
5
+ - 2.2.0
6
+
7
+ sudo: false
data/CHANGELOG ADDED
@@ -0,0 +1,96 @@
1
+ == ColorLib 1.4.2 / 2010.02.03
2
+ * Added 7000 range to Pantone
3
+
4
+ == ColorLib 1.4.1 / 2010.02.03
5
+ * Imported to github.
6
+ * Converted to Hoe 2.5 spec format.
7
+
8
+ == ColorLib 1.4.0 / 2007.02.11
9
+ * Merged Austin Ziegler's color-tools library (previously part of the Ruby
10
+ PDF Tools project) with Matt Lyon's color library.
11
+ - The HSL implementation from the ColorLib class has been merged into
12
+ ColorLib::HSL. ColorLib is a module the way it was for color-tools.
13
+ - A thin veneer has been written to allow ColorLib::new to return a ColorLib::HSL
14
+ instance; ColorLib::HSL supports as many methods as possible that were
15
+ previously supported by the ColorLib class.
16
+ - Values that were previously rounded by ColorLib are no longer rounded;
17
+ fractional values matter.
18
+ * Converted to hoe for project management.
19
+ * Moved to the next step of deprecating ColorLib::Name values; printing a
20
+ warning for each use (see the history for color-tools 1.3.0).
21
+ * Print a warning on the access of either VERSION or COLOR_TOOLS_VERSION; the
22
+ version constant is now COLOR_VERSION.
23
+ * Added humanized versions of accessors (e.g., CMYK colours now have both #cyan
24
+ and #c to access the cyan component of the colour; #cyan provides the value
25
+ as a percentage).
26
+ * Added CSS3 formatters for RGB, RGBA, HSL, and HSLA outputs. Note that the
27
+ ColorLib library does not yet have a way of setting alpha opacity, so the
28
+ output for RGBA and HSLA are at full alpha opacity (1.0). The values are
29
+ output with two decimal places.
30
+ * Applied a patch to provide simple arithmetic colour addition and subtraction
31
+ to ColorLib::GrayScale and ColorLib::RGB. The patch was contributed by Jeremy
32
+ Hinegardner <jeremy@hinegardner.org>. This patch also provides the ability to
33
+ return the maximum RGB value as a grayscale colour.
34
+ * Fixed two problems reported by Jean Krohn <jb.krohn@free.fr> against
35
+ color-tools relating to RGB-to-HSL and HSL-to-RGB conversion. (ColorLib and
36
+ color-tools use the same formulas, but the ordering of the calculations is
37
+ slightly different with ColorLib and did not suffer from this problem;
38
+ color-tools was more sensitive to floating-point values and precision
39
+ errors.)
40
+ * Fixed an issue with HSL/RGB conversions reported by Adam Johnson
41
+ <adam.sven.johnson@gmail.com>.
42
+ * Added an Adobe ColorLib swatch (Photoshop) palette reader,
43
+ ColorLib::Palette::AdobeColorLib (for .aco files only).
44
+
45
+ == ColorLib 0.1.0 / 2006.08.05
46
+ * Added HSL (degree, percent, percent) interface.
47
+ * Removed RGB instance variable; color is managed internally as HSL floating
48
+ point.
49
+ * Tests!
50
+
51
+ == color-tools 1.3.0
52
+ * Added new metallic colours suggested by Jim Freeze <jfn@freeze.org>. These
53
+ are in the namespace ColorLib::Metallic.
54
+ * Colours that were defined in the ColorLib namespace (e.g., ColorLib::Red,
55
+ ColorLib::AliceBlue) are now defined in ColorLib::RGB (e.g., ColorLib::RGB::Red,
56
+ ColorLib::RGB::AliceBlue). They are added back to the ColorLib namespace on the
57
+ first use of the old colours and a warning is printed. In version 1.4, this
58
+ warning will be printed on every use of the old colours. In version 1.5,
59
+ the backwards compatible support for colours like ColorLib::Red will be
60
+ removed completely.
61
+ * Added the ColorLib::CSS module, color_lib/css or ColorLib::CSS that provides a name
62
+ lookup of ColorLib::RGB-namespaced constants with ColorLib::CSS[name]. Most of
63
+ these colours (which are mirrored from the ColorLib::RGB default colours) are
64
+ only "officially" recognised under the CSS3 colour module or SVG.
65
+ * Added the ColorLib::HSL colour space and some helper utilities to ColorLib::RGB
66
+ for colour manipulation using the HSL value.
67
+ * Controlled internal value replacement to be between 0 and 1 for all
68
+ colours.
69
+ * Updated ColorLib::Palette::Gimp to more meaningfully deal with duplicate named
70
+ colours. Named colours now return an array of colours.
71
+ * Indicated the plans for some methods and constants out to color-tools 2.0.
72
+ * Added unit tests and fixed a number of hidden bugs because of them.
73
+
74
+ == color-tools 1.2.0
75
+ * Changed installer from a custom-written install.rb to setup.rb
76
+ 3.3.1-modified.
77
+ * Added ColorLib::GreyScale (or ColorLib::GrayScale).
78
+ * Added ColorLib::YIQ. This colour definition is incomplete; it does not have
79
+ conversions from YIQ to other colour spaces.
80
+
81
+ == color-tools 1.1.0
82
+ * Added color_lib/palette/gimp to support the reading and use of GIMP color
83
+ palettes.
84
+
85
+ == color-tools 1.0.0
86
+ * Initial release.
87
+
88
+ == Copyright
89
+ ColorLib
90
+ Colour Management with Ruby
91
+ http://rubyforge.org/projects/color
92
+
93
+ Licensed under a MIT-style licence. See Licence.txt in the main
94
+ distribution for full licensing information.
95
+
96
+ Copyright (c) 2005 - 2010 Austin Ziegler and Matt Lyon
data/Gemfile ADDED
@@ -0,0 +1,2 @@
1
+ source 'https://rubygems.org'
2
+ gemspec
data/LICENSE.txt ADDED
@@ -0,0 +1,21 @@
1
+ The MIT License (MIT)
2
+
3
+ Copyright (c) 2014 Brandfolder, Inc.
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in
13
+ all 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,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21
+ THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,25 @@
1
+ # ColorLib [![Build Status](https://travis-ci.org/brandfolder/color_lib.svg?branch=master)](https://travis-ci.org/brandfolder/color_lib)
2
+
3
+ A lib for colors.
4
+
5
+ ## Installation
6
+
7
+ Add this line to your application's Gemfile:
8
+
9
+ ```ruby
10
+ gem 'color_lib'
11
+ ```
12
+
13
+ And then execute:
14
+
15
+ $ bundle
16
+
17
+ Or install it yourself as:
18
+
19
+ $ gem install color_lib## Contributing
20
+
21
+ 1. Fork it ( https://github.com/brandfolder/color_lib/fork )
22
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
23
+ 3. Commit your changes (`git commit -am 'Add some feature'`)
24
+ 4. Push to the branch (`git push origin my-new-feature`)
25
+ 5. Create a new Pull Request
data/Rakefile ADDED
@@ -0,0 +1,11 @@
1
+ require "bundler/gem_tasks"
2
+ require 'rake/testtask'
3
+ require 'color_lib'
4
+
5
+ Rake::TestTask.new do |t|
6
+ t.libs << "test"
7
+ t.test_files = FileList['test/test_*.rb']
8
+ t.verbose = true
9
+ end
10
+
11
+ task default: :test
data/color_lib.gemspec ADDED
@@ -0,0 +1,24 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'color_lib/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "color_lib"
8
+ spec.version = ColorLib::VERSION
9
+ spec.authors = ["Brandfolder, Inc."]
10
+ spec.email = ["developers@brandfolder.com"]
11
+ spec.summary = %q{A lib for colors}
12
+ spec.description = %q{A lib for working with colors in ruby}
13
+ spec.homepage = "https://github.com/brandfolder/color_lib"
14
+ spec.license = "MIT"
15
+
16
+ spec.files = `git ls-files -z`.split("\x0")
17
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
18
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
+ spec.require_paths = ["lib"]
20
+
21
+ spec.add_development_dependency "bundler", "~> 1.7"
22
+ spec.add_development_dependency "rake", "~> 10.0"
23
+ spec.add_development_dependency "minitest", "~> 5.5"
24
+ end
data/lib/color_lib.rb ADDED
@@ -0,0 +1,139 @@
1
+ require "color_lib/version"
2
+
3
+ module ColorLib
4
+ COLOR_VERSION = VERSION
5
+
6
+ class RGB;
7
+ end
8
+ class CMYK;
9
+ end
10
+ class GrayScale;
11
+ end
12
+ class YIQ;
13
+ end
14
+ class Pantone;
15
+ end
16
+
17
+ # The maximum "resolution" for colour math; if any value is less than or
18
+ # equal to this value, it is treated as zero.
19
+ COLOR_EPSILON = 1e-5
20
+ # The tolerance for comparing the components of two colours. In general,
21
+ # colours are considered equal if all of their components are within this
22
+ # tolerance value of each other.
23
+ COLOR_TOLERANCE = 1e-4
24
+
25
+ class << self
26
+ # Returns +true+ if the value is less than COLOR_EPSILON.
27
+ def near_zero?(value)
28
+ (value.abs <= COLOR_EPSILON)
29
+ end
30
+
31
+ # Returns +true+ if the value is within COLOR_EPSILON of zero or less than
32
+ # zero.
33
+ def near_zero_or_less?(value)
34
+ (value < 0.0 or near_zero?(value))
35
+ end
36
+
37
+ # Returns +true+ if the value is within COLOR_EPSILON of one.
38
+ def near_one?(value)
39
+ near_zero?(value - 1.0)
40
+ end
41
+
42
+ # Returns +true+ if the value is within COLOR_EPSILON of one or more than
43
+ # one.
44
+ def near_one_or_more?(value)
45
+ (value > 1.0 or near_one?(value))
46
+ end
47
+
48
+ # Normalizes the value to the range (0.0) .. (1.0).
49
+ def normalize(value)
50
+ if near_zero_or_less? value
51
+ 0.0
52
+ elsif near_one_or_more? value
53
+ 1.0
54
+ else
55
+ value
56
+ end
57
+ end
58
+
59
+ alias normalize_fractional normalize
60
+
61
+ def normalize_to_range(value, range)
62
+ range = (range.end..range.begin) if (range.end < range.begin)
63
+
64
+ if value <= range.begin
65
+ range.begin
66
+ elsif value >= range.end
67
+ range.end
68
+ else
69
+ value
70
+ end
71
+ end
72
+
73
+ # Normalize the value to the range (0) .. (255).
74
+ def normalize_byte(value)
75
+ normalize_to_range(value, 0..255).to_i
76
+ end
77
+
78
+ alias normalize_8bit normalize_byte
79
+
80
+ # Normalize the value to the range (0) .. (65535).
81
+ def normalize_word(value)
82
+ normalize_to_range(value, 0..65535).to_i
83
+ end
84
+
85
+ alias normalize_16bit normalize_word
86
+
87
+ def const_missing(name) #:nodoc:
88
+ case name
89
+ when "VERSION", :VERSION, "COLOR_TOOLS_VERSION", :COLOR_TOOLS_VERSION
90
+ warn "ColorLib::#{name} has been deprecated. Use ColorLib::COLOR_VERSION instead."
91
+ ColorLib::COLOR_VERSION
92
+ else
93
+ if ColorLib::RGB.const_defined?(name)
94
+ warn "ColorLib::#{name} has been deprecated. Use ColorLib::RGB::#{name} instead."
95
+ ColorLib::RGB.const_get(name)
96
+ else
97
+ super
98
+ end
99
+ end
100
+ end
101
+
102
+ # Provides a thin veneer over the ColorLib module to make it seem like this
103
+ # is ColorLib 0.1.0 (a class) and not ColorLib 1.4.1 (a module). This
104
+ # "constructor" will be removed in the future.
105
+ #
106
+ # mode = :hsl:: +values+ must be an array of [ hue deg, sat %, lum % ].
107
+ # A ColorLib::HSL object will be created.
108
+ # mode = :rgb:: +values+ will either be an HTML-style colour string or
109
+ # an array of [ red, green, blue ] (range 0 .. 255). A
110
+ # ColorLib::RGB object will be created.
111
+ # mode = :cmyk:: +values+ must be an array of [ cyan %, magenta %, yellow
112
+ # %, black % ]. A ColorLib::CMYK object will be created.
113
+ def new(values, mode = :rgb)
114
+ warn "ColorLib.new has been deprecated. Use ColorLib::#{mode.to_s.upcase}.new instead."
115
+ color = case mode
116
+ when :hsl
117
+ ColorLib::HSL.new(*values)
118
+ when :rgb
119
+ values = [values].flatten
120
+ if values.size == 1
121
+ ColorLib::RGB.from_html(*values)
122
+ else
123
+ ColorLib::RGB.new(*values)
124
+ end
125
+ when :cmyk
126
+ ColorLib::CMYK.new(*values)
127
+ end
128
+ color.to_hsl
129
+ end
130
+ end
131
+ end
132
+
133
+ require 'color_lib/rgb'
134
+ require 'color_lib/cmyk'
135
+ require 'color_lib/grayscale'
136
+ require 'color_lib/hsl'
137
+ require 'color_lib/yiq'
138
+ require 'color_lib/rgb/metallic'
139
+ require 'color_lib/pantone'
@@ -0,0 +1,280 @@
1
+ # An CMYK colour object. CMYK (cyan, magenta, yellow, and black) colours are
2
+ # based on additive percentages of ink. A CMYK colour of (0.3, 0, 0.8, 0.3)
3
+ # would be mixed from 30% cyan, 0% magenta, 80% yellow, and 30% black.
4
+ # Primarily used in four-colour printing processes.
5
+ class ColorLib::CMYK
6
+ # The format of a DeviceCMYK colour for PDF. In color-tools 2.0 this will
7
+ # be removed from this package and added back as a modification by the
8
+ # PDF::Writer package.
9
+ PDF_FORMAT_STR = "%.3f %.3f %.3f %.3f %s"
10
+
11
+ # Compares the other colour to this one. The other colour will be
12
+ # converted to CMYK before comparison, so the comparison between a CMYK
13
+ # colour and a non-CMYK colour will be approximate and based on the other
14
+ # colour's #to_cmyk conversion. If there is no #to_cmyk conversion, this
15
+ # will raise an exception. This will report that two CMYK colours are
16
+ # equivalent if all component values are within COLOR_TOLERANCE of each
17
+ # other.
18
+ def ==(other)
19
+ other = other.to_cmyk
20
+ other.kind_of?(ColorLib::CMYK) and
21
+ ((@c - other.c).abs <= ColorLib::COLOR_TOLERANCE) and
22
+ ((@m - other.m).abs <= ColorLib::COLOR_TOLERANCE) and
23
+ ((@y - other.y).abs <= ColorLib::COLOR_TOLERANCE) and
24
+ ((@k - other.k).abs <= ColorLib::COLOR_TOLERANCE)
25
+ end
26
+
27
+ # Creates a CMYK colour object from fractional values 0..1.
28
+ #
29
+ # ColorLib::CMYK.from_fraction(0.3, 0, 0.8, 0.3)
30
+ def self.from_fraction(c = 0, m = 0, y = 0, k = 0)
31
+ colour = ColorLib::CMYK.new
32
+ colour.c = c
33
+ colour.m = m
34
+ colour.y = y
35
+ colour.k = k
36
+ colour
37
+ end
38
+
39
+ # Creates a CMYK colour object from percentages. Internally, the colour is
40
+ # managed as fractional values 0..1.
41
+ #
42
+ # ColorLib::CMYK.new(30, 0, 80, 30)
43
+ def self.from_percent(c = 0, m = 0, y = 0, k = 0)
44
+ ColorLib::CMYK.new(c, m, y, k)
45
+ end
46
+
47
+ # Creates a CMYK colour object from percentages. Internally, the colour is
48
+ # managed as fractional values 0..1.
49
+ #
50
+ # ColorLib::CMYK.new(30, 0, 80, 30)
51
+ def initialize(c = 0, m = 0, y = 0, k = 0)
52
+ @c = c / 100.0
53
+ @m = m / 100.0
54
+ @y = y / 100.0
55
+ @k = k / 100.0
56
+ end
57
+
58
+ # Present the colour as a DeviceCMYK fill colour string for PDF. This will
59
+ # be removed from the default package in color-tools 2.0.
60
+ def pdf_fill
61
+ PDF_FORMAT_STR % [@c, @m, @y, @k, "k"]
62
+ end
63
+
64
+ # Present the colour as a DeviceCMYK stroke colour string for PDF. This
65
+ # will be removed from the default package in color-tools 2.0.
66
+ def pdf_stroke
67
+ PDF_FORMAT_STR % [@c, @m, @y, @k, "K"]
68
+ end
69
+
70
+ # Present the colour as an RGB HTML/CSS colour string (e.g., "#aabbcc").
71
+ # Note that this will perform a #to_rgb operation using the default
72
+ # conversion formula.
73
+ def html
74
+ to_rgb.html
75
+ end
76
+
77
+ # Present the colour as an RGB HTML/CSS colour string (e.g., "rgb(0%, 50%,
78
+ # 100%)"). Note that this will perform a #to_rgb operation using the
79
+ # default conversion formula.
80
+ def css_rgb
81
+ to_rgb.css_rgb
82
+ end
83
+
84
+ # Present the colour as an RGBA (with alpha) HTML/CSS colour string (e.g.,
85
+ # "rgb(0%, 50%, 100%, 1)"). Note that this will perform a #to_rgb
86
+ # operation using the default conversion formula.
87
+ def css_rgba
88
+ to_rgb.css_rgba
89
+ end
90
+
91
+ # Present the colour as an HSL HTML/CSS colour string (e.g., "hsl(180,
92
+ # 25%, 35%)"). Note that this will perform a #to_hsl operation using the
93
+ # default conversion formula.
94
+ def css_hsl
95
+ to_hsl.css_hsl
96
+ end
97
+
98
+ # Present the colour as an HSLA (with alpha) HTML/CSS colour string (e.g.,
99
+ # "hsla(180, 25%, 35%, 1)"). Note that this will perform a #to_hsl
100
+ # operation using the default conversion formula.
101
+ def css_hsla
102
+ to_hsl.css_hsla
103
+ end
104
+
105
+ # Converts the CMYK colour to RGB. Most colour experts strongly suggest
106
+ # that this is not a good idea (some even suggesting that it's a very bad
107
+ # idea). CMYK represents additive percentages of inks on white paper,
108
+ # whereas RGB represents mixed colour intensities on a black screen.
109
+ #
110
+ # However, the colour conversion can be done, and there are two different
111
+ # methods for the conversion that provide slightly different results.
112
+ # Adobe PDF conversions are done with the first form.
113
+ #
114
+ # # Adobe PDF Display Formula
115
+ # r = 1.0 - min(1.0, c + k)
116
+ # g = 1.0 - min(1.0, m + k)
117
+ # b = 1.0 - min(1.0, y + k)
118
+ #
119
+ # # Other
120
+ # r = 1.0 - (c * (1.0 - k) + k)
121
+ # g = 1.0 - (m * (1.0 - k) + k)
122
+ # b = 1.0 - (y * (1.0 - k) + k)
123
+ #
124
+ # If we have a CMYK colour of [33% 66% 83% 25%], the first method will
125
+ # give an approximate RGB colour of (107, 23, 0) or #6b1700. The second
126
+ # method will give an approximate RGB colour of (128, 65, 33) or #804121.
127
+ # Which is correct? Although the colours may seem to be drastically
128
+ # different in the RGB colour space, they are very similar colours,
129
+ # differing mostly in intensity. The first is a darker, slightly redder
130
+ # brown; the second is a lighter brown.
131
+ #
132
+ # Because of this subtlety, both methods are now offered for conversion.
133
+ # The Adobe method is not used by default; to enable it, pass +true+ to
134
+ # #to_rgb.
135
+ #
136
+ # Future versions of ColorLib may offer other conversion mechanisms that
137
+ # offer greater colour fidelity, including recognition of ICC colour
138
+ # profiles.
139
+ def to_rgb(use_adobe_method = false)
140
+ if use_adobe_method
141
+ r = 1.0 - [1.0, @c + @k].min
142
+ g = 1.0 - [1.0, @m + @k].min
143
+ b = 1.0 - [1.0, @y + @k].min
144
+ else
145
+ r = 1.0 - (@c.to_f * (1.0 - @k.to_f) + @k.to_f)
146
+ g = 1.0 - (@m.to_f * (1.0 - @k.to_f) + @k.to_f)
147
+ b = 1.0 - (@y.to_f * (1.0 - @k.to_f) + @k.to_f)
148
+ end
149
+ ColorLib::RGB.from_fraction(r, g, b)
150
+ end
151
+
152
+ # Converts the CMYK colour to a single greyscale value. There are
153
+ # undoubtedly multiple methods for this conversion, but only a minor
154
+ # variant of the Adobe conversion method will be used:
155
+ #
156
+ # g = 1.0 - min(1.0, 0.299 * c + 0.587 * m + 0.114 * y + k)
157
+ #
158
+ # This treats the CMY values similarly to YIQ (NTSC) values and then adds
159
+ # the level of black. This is a variant of the Adobe version because it
160
+ # uses the more precise YIQ (NTSC) conversion values for Y (intensity)
161
+ # rather than the approximates provided by Adobe (0.3, 0.59, and 0.11).
162
+ def to_grayscale
163
+ c = 0.299 * @c.to_f
164
+ m = 0.587 * @m.to_f
165
+ y = 0.114 * @y.to_f
166
+ g = 1.0 - [1.0, c + m + y + @k].min
167
+ ColorLib::GrayScale.from_fraction(g)
168
+ end
169
+
170
+ alias to_greyscale to_grayscale
171
+
172
+ def to_cmyk
173
+ self
174
+ end
175
+
176
+ def inspect
177
+ "CMYK [%.2f%%, %.2f%%, %.2f%%, %.2f%%]" % [cyan, magenta, yellow, black]
178
+ end
179
+
180
+ # Converts to RGB then YIQ.
181
+ def to_yiq
182
+ to_rgb.to_yiq
183
+ end
184
+
185
+ # Converts to RGB then HSL.
186
+ def to_hsl
187
+ to_rgb.to_hsl
188
+ end
189
+
190
+ # Returns the cyan (C) component of the CMYK colour as a percentage value.
191
+ def cyan
192
+ @c * 100.0
193
+ end
194
+
195
+ # Returns the cyan (C) component of the CMYK colour as a value in the
196
+ # range 0.0 .. 1.0.
197
+ def c
198
+ @c
199
+ end
200
+
201
+ # Sets the cyan (C) component of the CMYK colour as a percentage value.
202
+ def cyan=(cc)
203
+ @c = ColorLib.normalize(cc / 100.0)
204
+ end
205
+
206
+ # Sets the cyan (C) component of the CMYK colour as a value in the range
207
+ # 0.0 .. 1.0.
208
+ def c=(cc)
209
+ @c = ColorLib.normalize(cc)
210
+ end
211
+
212
+ # Returns the magenta (M) component of the CMYK colour as a percentage
213
+ # value.
214
+ def magenta
215
+ @m * 100.0
216
+ end
217
+
218
+ # Returns the magenta (M) component of the CMYK colour as a value in the
219
+ # range 0.0 .. 1.0.
220
+ def m
221
+ @m
222
+ end
223
+
224
+ # Sets the magenta (M) component of the CMYK colour as a percentage value.
225
+ def magenta=(mm)
226
+ @m = ColorLib.normalize(mm / 100.0)
227
+ end
228
+
229
+ # Sets the magenta (M) component of the CMYK colour as a value in the
230
+ # range 0.0 .. 1.0.
231
+ def m=(mm)
232
+ @m = ColorLib.normalize(mm)
233
+ end
234
+
235
+ # Returns the yellow (Y) component of the CMYK colour as a percentage
236
+ # value.
237
+ def yellow
238
+ @y * 100.0
239
+ end
240
+
241
+ # Returns the yellow (Y) component of the CMYK colour as a value in the
242
+ # range 0.0 .. 1.0.
243
+ def y
244
+ @y
245
+ end
246
+
247
+ # Sets the yellow (Y) component of the CMYK colour as a percentage value.
248
+ def yellow=(yy)
249
+ @y = ColorLib.normalize(yy / 100.0)
250
+ end
251
+
252
+ # Sets the yellow (Y) component of the CMYK colour as a value in the range
253
+ # 0.0 .. 1.0.
254
+ def y=(kk)
255
+ @y = ColorLib.normalize(kk)
256
+ end
257
+
258
+ # Returns the black (K) component of the CMYK colour as a percentage
259
+ # value.
260
+ def black
261
+ @k * 100.0
262
+ end
263
+
264
+ # Returns the black (K) component of the CMYK colour as a value in the
265
+ # range 0.0 .. 1.0.
266
+ def k
267
+ @k
268
+ end
269
+
270
+ # Sets the black (K) component of the CMYK colour as a percentage value.
271
+ def black=(kk)
272
+ @k = ColorLib.normalize(kk / 100.0)
273
+ end
274
+
275
+ # Sets the black (K) component of the CMYK colour as a value in the range
276
+ # 0.0 .. 1.0.
277
+ def k=(kk)
278
+ @k = ColorLib.normalize(kk)
279
+ end
280
+ end