ripta-color-tools 1.4.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/Changelog +55 -0
- data/Install +18 -0
- data/README.rdoc +82 -0
- data/Rakefile +123 -0
- data/lib/color.rb +78 -0
- data/lib/color/cmyk.rb +185 -0
- data/lib/color/css.rb +27 -0
- data/lib/color/grayscale.rb +135 -0
- data/lib/color/hsl.rb +134 -0
- data/lib/color/palette.rb +18 -0
- data/lib/color/palette/gimp.rb +105 -0
- data/lib/color/palette/monocontrast.rb +178 -0
- data/lib/color/rgb-colors.rb +189 -0
- data/lib/color/rgb.rb +315 -0
- data/lib/color/rgb/metallic.rb +28 -0
- data/lib/color/yiq.rb +80 -0
- data/metaconfig +13 -0
- data/pre-setup.rb +55 -0
- data/setup.rb +1366 -0
- data/tests/test_cmyk.rb +116 -0
- data/tests/test_css.rb +28 -0
- data/tests/test_gimp.rb +79 -0
- data/tests/test_grayscale.rb +87 -0
- data/tests/test_hsl.rb +93 -0
- data/tests/test_monocontrast.rb +145 -0
- data/tests/test_rgb.rb +160 -0
- data/tests/test_yiq.rb +81 -0
- data/tests/testall.rb +20 -0
- metadata +84 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: d0671d2f6ffbb0a65f9a38f2bebe37a9ac462c4d
|
4
|
+
data.tar.gz: 985a016475aab3b0a0f4e941c6977eda55afa6e2
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 158256c3e29dcff40f383abcdaa301f0f6e546012a2b9484db1383f3fb8a1b01954d3297b54eebbd019acc7f0f75a2e14a41a20d1113d762a2e1976e66950f58
|
7
|
+
data.tar.gz: 26e2308403b9ed12f4ddc1396121825af1110099913f9d516fde59337f1e5bc53e075285b21a2703c9469a050ecdc46d47540e55a38b226177ee139deddc3749
|
data/Changelog
ADDED
@@ -0,0 +1,55 @@
|
|
1
|
+
= color-tools Change Log
|
2
|
+
|
3
|
+
== color-utils 1.4.0
|
4
|
+
* Use autoloading for various parts of the library. Now simply require "color"
|
5
|
+
and other modules/classes will be required for you when you use them for the
|
6
|
+
first time.
|
7
|
+
|
8
|
+
== color-utils 1.3.0
|
9
|
+
* Added new metallic colours suggested by Jim Freeze <jfn@freeze.org>. These
|
10
|
+
are in the namespace Color::Metallic.
|
11
|
+
* Colours that were defined in the Color namespace (e.g., Color::Red,
|
12
|
+
Color::AliceBlue) are now defined in Color::RGB (e.g., Color::RGB::Red,
|
13
|
+
Color::RGB::AliceBlue). They are added back to the Color namespace on the
|
14
|
+
first use of the old colours and a warning is printed. In version 1.4, this
|
15
|
+
warning will be printed on every use of the old colours. In version 1.5,
|
16
|
+
the backwards compatible support for colours like Color::Red will be
|
17
|
+
removed completely.
|
18
|
+
* Added the Color::CSS module, color/css or Color::CSS that provides a name
|
19
|
+
lookup of Color::RGB-namespaced constants with Color::CSS[name]. Most of
|
20
|
+
these colours (which are mirrored from the Color::RGB default colours) are
|
21
|
+
only "officially" recognised under the CSS3 colour module or SVG.
|
22
|
+
* Added the Color::HSL colour space and some helper utilities to Color::RGB
|
23
|
+
for colour manipulation using the HSL value.
|
24
|
+
* Controlled internal value replacement to be between 0 and 1 for all
|
25
|
+
colours.
|
26
|
+
* Updated Color::Palette::Gimp to more meaningfully deal with duplicate named
|
27
|
+
colours. Named colours now return an array of colours.
|
28
|
+
* Indicated the plans for some methods and constants out to color-tools 2.0.
|
29
|
+
* Added unit tests and fixed a number of hidden bugs because of them.
|
30
|
+
|
31
|
+
== color-utils 1.2.0
|
32
|
+
* Changed installer from a custom-written install.rb to setup.rb
|
33
|
+
3.3.1-modified.
|
34
|
+
* Added Color::GreyScale (or Color::GrayScale).
|
35
|
+
* Added Color::YIQ. This colour definition is incomplete; it does not have
|
36
|
+
conversions from YIQ to other colour spaces.
|
37
|
+
|
38
|
+
== color-utils 1.1.0
|
39
|
+
* Added color/palette/gimp to support the reading and use of GIMP color
|
40
|
+
palettes.
|
41
|
+
|
42
|
+
== color-utils 1.0.0
|
43
|
+
* Initial release.
|
44
|
+
|
45
|
+
#--
|
46
|
+
# Colour management with Ruby.
|
47
|
+
#
|
48
|
+
# Copyright 2005 Austin Ziegler
|
49
|
+
# http://rubyforge.org/ruby-pdf/
|
50
|
+
#
|
51
|
+
# Licensed under a MIT-style licence.
|
52
|
+
#
|
53
|
+
# $Id$
|
54
|
+
#++
|
55
|
+
# vim: sts=2 sw=2 ts=4 et ai tw=77
|
data/Install
ADDED
@@ -0,0 +1,18 @@
|
|
1
|
+
Installing this package is as simple as:
|
2
|
+
|
3
|
+
% ruby setup.rb
|
4
|
+
|
5
|
+
Alternatively, you can use the RubyGem version of color-tools available as
|
6
|
+
color-tools-1.3.0.gem from the usual sources.
|
7
|
+
|
8
|
+
#--
|
9
|
+
# Colour management with Ruby.
|
10
|
+
#
|
11
|
+
# Copyright 2005 Austin Ziegler
|
12
|
+
# http://rubyforge.org/ruby-pdf/
|
13
|
+
#
|
14
|
+
# Licensed under a MIT-style licence.
|
15
|
+
#
|
16
|
+
# $Id$
|
17
|
+
#++
|
18
|
+
# vim: sts=2 sw=2 ts=4 et ai tw=77
|
data/README.rdoc
ADDED
@@ -0,0 +1,82 @@
|
|
1
|
+
|
2
|
+
color-tools is a Ruby library to provide RGB, CMYK, and other colourspace
|
3
|
+
support to applications that require it. It also provides 152 named RGB
|
4
|
+
colours. It offers 152 named RGB colours (184 with spelling variations)
|
5
|
+
that are commonly supported and used in HTML, SVG, and X11 applications. A
|
6
|
+
technique for generating a monochromatic contrasting palette is also
|
7
|
+
included.
|
8
|
+
|
9
|
+
Version 1.3 offers significant enhancements over color-tools 1.2, and a
|
10
|
+
plan for an incompatible change to the library.
|
11
|
+
|
12
|
+
* Colours that were defined in the Color namespace (e.g., Color::Red,
|
13
|
+
Color::AliceBlue) are now defined in Color::RGB (e.g., Color::RGB::Red,
|
14
|
+
Color::RGB::AliceBlue). They are added back to the Color namespace on
|
15
|
+
the first use of the old colours and a warning is printed. In version
|
16
|
+
1.4, this warning will be printed on every use of the old colours. In
|
17
|
+
version 1.5, the backwards compatible support for colours like
|
18
|
+
Color::Red will be removed completely.
|
19
|
+
|
20
|
+
* A CSS colour name module has been added. It is based on the Color::RGB
|
21
|
+
predefined colours. It is called with "Color::CSS[color]". The provided
|
22
|
+
colour name will be looked up ignoring case so that "DarkSalmon" and
|
23
|
+
"darksalmon" (and :darksalmon) are the same value. This makes it easier
|
24
|
+
on web or SVG developers who wish to be able to manipulate a colour
|
25
|
+
based on a CSS colour name.
|
26
|
+
|
27
|
+
* A new predefined colour namespace has been added for RGB metallic
|
28
|
+
colours (Color::Metallic, in color/rgb/metallic), suggested by Jim
|
29
|
+
Freeze <jfn@freeze.org>.
|
30
|
+
|
31
|
+
* A new colour space, Color::HSL (hue, saturation, and luminosity) has
|
32
|
+
been added with some helper methods to Color::RGB for colour
|
33
|
+
manipulation.
|
34
|
+
|
35
|
+
* Added unit tests and fixed various little bugs.
|
36
|
+
|
37
|
+
== Copyright
|
38
|
+
Copyright 2005 by Austin Ziegler
|
39
|
+
|
40
|
+
Color::Palette was developed based on techniques described by Andy
|
41
|
+
"Malarkey" Clarke[1], implemented in JavaScript by Steve G. Chipman at
|
42
|
+
SlayerOffice[2] and by Patrick Fitzgerald of BarelyFitz[3] in PHP.
|
43
|
+
|
44
|
+
== Licence
|
45
|
+
Permission is hereby granted, free of charge, to any person obtaining a
|
46
|
+
copy of this software and associated documentation files (the "Soft-
|
47
|
+
ware"), to deal in the Software without restriction, including without
|
48
|
+
limitation the rights to use, copy, modify, merge, publish, distribute,
|
49
|
+
sublicense, and/or sell copies of the Software, and to permit persons to
|
50
|
+
whom the Software is furnished to do so, subject to the following
|
51
|
+
conditions:
|
52
|
+
|
53
|
+
* The names of its contributors may not be used to endorse or promote
|
54
|
+
products derived from this software without specific prior written
|
55
|
+
permission.
|
56
|
+
|
57
|
+
The above copyright notice and this permission notice shall be included in
|
58
|
+
all copies or substantial portions of the Software.
|
59
|
+
|
60
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
61
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
62
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
63
|
+
THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
64
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
65
|
+
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
66
|
+
DEALINGS IN THE SOFTWARE.
|
67
|
+
|
68
|
+
[1] http://www.stuffandnonsense.co.uk/archives/creating_colour_palettes.html
|
69
|
+
[2] http://slayeroffice.com/tools/color_palette/
|
70
|
+
[3] http://www.barelyfitz.com/projects/csscolor/
|
71
|
+
|
72
|
+
#--
|
73
|
+
# Colour management with Ruby.
|
74
|
+
#
|
75
|
+
# Copyright 2005 Austin Ziegler
|
76
|
+
# http://rubyforge.org/ruby-pdf/
|
77
|
+
#
|
78
|
+
# Licensed under a MIT-style licence.
|
79
|
+
#
|
80
|
+
# $Id$
|
81
|
+
#++
|
82
|
+
# vim: sts=2 sw=2 ts=4 et ai tw=74
|
data/Rakefile
ADDED
@@ -0,0 +1,123 @@
|
|
1
|
+
#! /usr/bin/env rake
|
2
|
+
#--
|
3
|
+
# Colour management with Ruby.
|
4
|
+
#
|
5
|
+
# Copyright 2005 Austin Ziegler
|
6
|
+
# http://rubyforge.org/ruby-pdf/
|
7
|
+
#
|
8
|
+
# Licensed under a MIT-style licence.
|
9
|
+
#
|
10
|
+
# $Id$
|
11
|
+
#++
|
12
|
+
# vim: sts=2 sw=2 ts=4 et ai tw=77
|
13
|
+
|
14
|
+
$LOAD_PATH.unshift('lib')
|
15
|
+
|
16
|
+
require 'rubygems'
|
17
|
+
require 'rubygems/package_task'
|
18
|
+
require 'color'
|
19
|
+
|
20
|
+
DISTDIR = "color-tools-#{Color::COLOR_TOOLS_VERSION}"
|
21
|
+
TARDIST = "../#{DISTDIR}.tar.gz"
|
22
|
+
|
23
|
+
DATE_RE = %r<(\d{4})[./-]?(\d{2})[./-]?(\d{2})(?:[\sT]?(\d{2})[:.]?(\d{2})[:.]?(\d{2})?)?>
|
24
|
+
|
25
|
+
if ENV['RELEASE_DATE']
|
26
|
+
year, month, day, hour, minute, second = DATE_RE.match(ENV['RELEASE_DATE']).captures
|
27
|
+
year ||= 0
|
28
|
+
month ||= 0
|
29
|
+
day ||= 0
|
30
|
+
hour ||= 0
|
31
|
+
minute ||= 0
|
32
|
+
second ||= 0
|
33
|
+
ReleaseDate = Time.mktime(year, month, day, hour, minute, second)
|
34
|
+
else
|
35
|
+
ReleaseDate = nil
|
36
|
+
end
|
37
|
+
|
38
|
+
task :test do |t|
|
39
|
+
require 'test/unit/testsuite'
|
40
|
+
require 'test/unit/ui/console/testrunner'
|
41
|
+
|
42
|
+
runner = Test::Unit::UI::Console::TestRunner
|
43
|
+
|
44
|
+
$LOAD_PATH.unshift('tests')
|
45
|
+
Dir['tests/test_*.rb'].each do |testcase|
|
46
|
+
load testcase
|
47
|
+
end
|
48
|
+
|
49
|
+
suite = Test::Unit::TestSuite.new("color-tools")
|
50
|
+
|
51
|
+
ObjectSpace.each_object(Class) do |testcase|
|
52
|
+
suite << testcase.suite if testcase < Test::Unit::TestCase
|
53
|
+
end
|
54
|
+
|
55
|
+
runner.run(suite)
|
56
|
+
end
|
57
|
+
|
58
|
+
spec = eval(File.read("color-tools.gemspec"))
|
59
|
+
spec.version = Color::COLOR_TOOLS_VERSION
|
60
|
+
desc "Build the RubyGem for color-tools"
|
61
|
+
task :gem => [ :test ]
|
62
|
+
Gem::PackageTask.new(spec) do |g|
|
63
|
+
g.need_tar = false
|
64
|
+
g.need_zip = false
|
65
|
+
g.package_dir = ".."
|
66
|
+
end
|
67
|
+
|
68
|
+
desc "Build a color-tools .tar.gz distribution."
|
69
|
+
task :tar => [ TARDIST ]
|
70
|
+
file TARDIST => [ :test ] do |t|
|
71
|
+
require 'archive/tar/minitar'
|
72
|
+
require 'zlib'
|
73
|
+
current = File.basename(Dir.pwd)
|
74
|
+
Dir.chdir("..") do
|
75
|
+
begin
|
76
|
+
files = Dir["#{current}/**/*"].select { |dd| dd !~ %r{(?:/CVS/?|~$)} }
|
77
|
+
files.map! do |dd|
|
78
|
+
ddnew = dd.gsub(/^#{current}/, DISTDIR)
|
79
|
+
mtime = ReleaseDate || File.stat(dd).mtime
|
80
|
+
if File.directory?(dd)
|
81
|
+
{ :name => ddnew, :mode => 0755, :dir => true, :mtime => mtime }
|
82
|
+
else
|
83
|
+
if dd =~ %r{bin/}
|
84
|
+
mode = 0755
|
85
|
+
else
|
86
|
+
mode = 0644
|
87
|
+
end
|
88
|
+
data = File.open(dd, "rb") { |ff| ff.read }
|
89
|
+
{ :name => ddnew, :mode => mode, :data => data, :size => data.size,
|
90
|
+
:mtime => mtime }
|
91
|
+
end
|
92
|
+
end
|
93
|
+
|
94
|
+
ff = File.open(t.name.gsub(%r{^\.\./}o, ''), "wb")
|
95
|
+
gz = Zlib::GzipWriter.new(ff)
|
96
|
+
tw = Archive::Tar::Minitar::Writer.new(gz)
|
97
|
+
|
98
|
+
files.each do |entry|
|
99
|
+
if entry[:dir]
|
100
|
+
tw.mkdir(entry[:name], entry)
|
101
|
+
else
|
102
|
+
tw.add_file_simple(entry[:name], entry) { |os| os.write(entry[:data]) }
|
103
|
+
end
|
104
|
+
end
|
105
|
+
ensure
|
106
|
+
tw.close if tw
|
107
|
+
gz.close if gz
|
108
|
+
end
|
109
|
+
end
|
110
|
+
end
|
111
|
+
task TARDIST => [ :test ]
|
112
|
+
|
113
|
+
desc "Build the rdoc documentation for color-tools"
|
114
|
+
task :docs do
|
115
|
+
require 'rdoc/rdoc'
|
116
|
+
rdoc_options = %w(--title color-tools --main README.rdoc --line-numbers)
|
117
|
+
files = FileList[*%w(README.rdoc Changelog bin/**/*.rb lib/**/*.rb)]
|
118
|
+
rdoc_options += files.to_a
|
119
|
+
RDoc::RDoc.new.document(rdoc_options)
|
120
|
+
end
|
121
|
+
|
122
|
+
desc "Build everything."
|
123
|
+
task :default => [ :tar, :gem ]
|
data/lib/color.rb
ADDED
@@ -0,0 +1,78 @@
|
|
1
|
+
#--
|
2
|
+
# Colour management with Ruby.
|
3
|
+
#
|
4
|
+
# Copyright 2005 Austin Ziegler
|
5
|
+
# http://rubyforge.org/ruby-pdf/
|
6
|
+
#
|
7
|
+
# Licensed under a MIT-style licence.
|
8
|
+
#
|
9
|
+
# $Id$
|
10
|
+
#++
|
11
|
+
|
12
|
+
# = Colour Management with Ruby
|
13
|
+
#
|
14
|
+
# == Copyright
|
15
|
+
# Copyright 2005 by Austin Ziegler
|
16
|
+
#
|
17
|
+
# Color::RGB and Color::CMYK were originally developed for the Ruby PDF
|
18
|
+
# project and PDF::Writer and represent wholly unique code.
|
19
|
+
#
|
20
|
+
# Color::Palette was developed based on techniques described by Andy
|
21
|
+
# "Malarkey"[http://www.stuffandnonsense.co.uk/archives/creating_colour_palettes.html]
|
22
|
+
# Clarke, implemented in JavaScript by Steve G. Chipman at
|
23
|
+
# SlayerOffice[http://slayeroffice.com/tools/color_palette/] and by Patrick
|
24
|
+
# Fitzgerald of BarelyFitz[http://www.barelyfitz.com/projects/csscolor/] in
|
25
|
+
# PHP.
|
26
|
+
#
|
27
|
+
# == LICENCE
|
28
|
+
# Permission is hereby granted, free of charge, to any person obtaining a
|
29
|
+
# copy of this software and associated documentation files (the "Software"),
|
30
|
+
# to deal in the Software without restriction, including without limitation
|
31
|
+
# the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
32
|
+
# and/or sell copies of the Software, and to permit persons to whom the
|
33
|
+
# Software is furnished to do so, subject to the following conditions:
|
34
|
+
#
|
35
|
+
# * The names of its contributors may not be used to endorse or promote
|
36
|
+
# products derived from this software without specific prior written
|
37
|
+
# permission.
|
38
|
+
#
|
39
|
+
# The above copyright notice and this permission notice shall be included in
|
40
|
+
# all copies or substantial portions of the Software.
|
41
|
+
#
|
42
|
+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
43
|
+
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
44
|
+
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
45
|
+
# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
46
|
+
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
47
|
+
# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
48
|
+
# DEALINGS IN THE SOFTWARE.
|
49
|
+
module Color
|
50
|
+
|
51
|
+
COLOR_TOOLS_VERSION = '1.3.0'
|
52
|
+
|
53
|
+
autoload :CMYK, "color/cmyk"
|
54
|
+
autoload :CSS, "color/css"
|
55
|
+
autoload :GrayScale, "color/grayscale"
|
56
|
+
autoload :GreyScale, "color/grayscale"
|
57
|
+
autoload :HSL, "color/hsl"
|
58
|
+
autoload :Palette, "color/palette"
|
59
|
+
autoload :RGB, "color/rgb"
|
60
|
+
autoload :YIQ, "color/yiq"
|
61
|
+
|
62
|
+
def self.const_missing(name) #:nodoc:
|
63
|
+
if Color::RGB.const_defined?(name)
|
64
|
+
warn "These colour constants have been deprecated. Use Color::RGB::#{name} instead."
|
65
|
+
Color::RGB.constants.each do |const|
|
66
|
+
color = Color::RGB.const_get(const)
|
67
|
+
const_set(const, color) if color.is_a?(Color::RGB)
|
68
|
+
end
|
69
|
+
class <<Color
|
70
|
+
remove_method :const_missing
|
71
|
+
end
|
72
|
+
Color.const_get(name)
|
73
|
+
else
|
74
|
+
super
|
75
|
+
end
|
76
|
+
end
|
77
|
+
|
78
|
+
end
|
data/lib/color/cmyk.rb
ADDED
@@ -0,0 +1,185 @@
|
|
1
|
+
#--
|
2
|
+
# Colour management with Ruby.
|
3
|
+
#
|
4
|
+
# Copyright 2005 Austin Ziegler
|
5
|
+
# http://rubyforge.org/ruby-pdf/
|
6
|
+
#
|
7
|
+
# Licensed under a MIT-style licence.
|
8
|
+
#
|
9
|
+
# $Id$
|
10
|
+
#++
|
11
|
+
|
12
|
+
# An CMYK colour object. CMYK (cyan, magenta, yellow, and black) colours
|
13
|
+
# are based on additive percentages of ink. A CMYK colour of (0.3, 0, 0.8,
|
14
|
+
# 0.3) would be mixed from 30% cyan, 0% magenta, 80% yellow, and 30%
|
15
|
+
# black.
|
16
|
+
class Color::CMYK
|
17
|
+
# The format of a DeviceCMYK colour for PDF. In color-tools 2.0 this
|
18
|
+
# will be removed from this package and added back as a modification by
|
19
|
+
# the PDF::Writer package.
|
20
|
+
PDF_FORMAT_STR = "%.3f %.3f %.3f %.3f %s"
|
21
|
+
|
22
|
+
# Compares the other colour to this one. The other colour will be
|
23
|
+
# converted to CMYK before comparison, so the comparison between a CMYK
|
24
|
+
# colour and a non-CMYK colour will be approximate and based on the
|
25
|
+
# other colour's #to_cmyk conversion. If there is no #to_cmyk
|
26
|
+
# conversion, this will raise an exception. This will report that two
|
27
|
+
# CMYK colours are equivalent if all component values are within 1e-4
|
28
|
+
# (0.0001) of each other.
|
29
|
+
def ==(other)
|
30
|
+
other = other.to_cmyk
|
31
|
+
other.kind_of?(Color::CMYK) and
|
32
|
+
((@c - other.c).abs <= 1e-4) and
|
33
|
+
((@m - other.m).abs <= 1e-4) and
|
34
|
+
((@y - other.y).abs <= 1e-4) and
|
35
|
+
((@k - other.k).abs <= 1e-4)
|
36
|
+
end
|
37
|
+
|
38
|
+
# Creates a CMYK colour object from fractional values 0..1.
|
39
|
+
#
|
40
|
+
# Color::CMYK.from_fraction(0.3, 0, 0.8, 0.3)
|
41
|
+
def self.from_fraction(c = 0, m = 0, y = 0, k = 0)
|
42
|
+
colour = Color::CMYK.new
|
43
|
+
colour.c = c
|
44
|
+
colour.m = m
|
45
|
+
colour.y = y
|
46
|
+
colour.k = k
|
47
|
+
colour
|
48
|
+
end
|
49
|
+
|
50
|
+
# Creates a CMYK colour object from percentages. Internally, the colour
|
51
|
+
# is managed as fractional values 0..1.
|
52
|
+
#
|
53
|
+
# Color::CMYK.from_fraction(30, 0, 80, 30)
|
54
|
+
def initialize(c = 0, m = 0, y = 0, k = 0)
|
55
|
+
@c = c / 100.0
|
56
|
+
@m = m / 100.0
|
57
|
+
@y = y / 100.0
|
58
|
+
@k = k / 100.0
|
59
|
+
end
|
60
|
+
|
61
|
+
# Present the colour as a DeviceCMYK fill colour string for PDF. This
|
62
|
+
# will be removed from the default package in color-tools 2.0.
|
63
|
+
def pdf_fill
|
64
|
+
PDF_FORMAT_STR % [ @c, @m, @y, @k, "k" ]
|
65
|
+
end
|
66
|
+
|
67
|
+
# Present the colour as a DeviceCMYK stroke colour string for PDF. This
|
68
|
+
# will be removed from the default package in color-tools 2.0.
|
69
|
+
def pdf_stroke
|
70
|
+
PDF_FORMAT_STR % [ @c, @m, @y, @k, "K" ]
|
71
|
+
end
|
72
|
+
|
73
|
+
# Present the colour as an RGB HTML/CSS colour string. Note that this
|
74
|
+
# will perform a #to_rgb operation using the default conversion formula.
|
75
|
+
def html
|
76
|
+
to_rgb.html
|
77
|
+
end
|
78
|
+
|
79
|
+
# Converts the CMYK colour to RGB. Most colour experts strongly suggest
|
80
|
+
# that this is not a good idea (some even suggesting that it's a very
|
81
|
+
# bad idea). CMYK represents additive percentages of inks on white
|
82
|
+
# paper, whereas RGB represents mixed colour intensities on a black
|
83
|
+
# screen.
|
84
|
+
#
|
85
|
+
# However, the colour conversion can be done, and there are two
|
86
|
+
# different methods for the conversion that provide slightly different
|
87
|
+
# results. Adobe PDF conversions are done with the first form.
|
88
|
+
#
|
89
|
+
# # Adobe PDF Display Formula
|
90
|
+
# r = 1.0 - min(1.0, c + k)
|
91
|
+
# g = 1.0 - min(1.0, m + k)
|
92
|
+
# b = 1.0 - min(1.0, y + k)
|
93
|
+
#
|
94
|
+
# # Other
|
95
|
+
# r = 1.0 - (c * (1.0 - k) + k)
|
96
|
+
# g = 1.0 - (m * (1.0 - k) + k)
|
97
|
+
# b = 1.0 - (y * (1.0 - k) + k)
|
98
|
+
#
|
99
|
+
# If we have a CMYK colour of [33% 66% 83% 25%], the first method will
|
100
|
+
# give an approximate RGB colour of (107, 23, 0) or #6b1700. The second
|
101
|
+
# method will give an approximate RGB colour of (128, 65, 33) or
|
102
|
+
# #804121. Which is correct? Although the colours may seem to be
|
103
|
+
# drastically different in the RGB colour space, they are very similar
|
104
|
+
# colours, differing mostly in intensity. The first is a darker,
|
105
|
+
# slightly redder brown; the second is a lighter brown.
|
106
|
+
#
|
107
|
+
# Because of this subtlety, both methods are now offered for conversion
|
108
|
+
# in color-tools 1.2 or later. The Adobe method is not used by default;
|
109
|
+
# to enable it, pass +true+ to #to_rgb.
|
110
|
+
#
|
111
|
+
# Future versions of color-tools may offer other conversion mechanisms
|
112
|
+
# that offer greater colour fidelity.
|
113
|
+
def to_rgb(use_adobe_method = false)
|
114
|
+
if use_adobe_method
|
115
|
+
r = 1.0 - [1.0, @c + @k].min
|
116
|
+
g = 1.0 - [1.0, @m + @k].min
|
117
|
+
b = 1.0 - [1.0, @y + @k].min
|
118
|
+
else
|
119
|
+
r = 1.0 - (@c.to_f * (1.0 - @k.to_f) + @k.to_f)
|
120
|
+
g = 1.0 - (@m.to_f * (1.0 - @k.to_f) + @k.to_f)
|
121
|
+
b = 1.0 - (@y.to_f * (1.0 - @k.to_f) + @k.to_f)
|
122
|
+
end
|
123
|
+
Color::RGB.from_fraction(r, g, b)
|
124
|
+
end
|
125
|
+
|
126
|
+
# Converts the CMYK colour to a single greyscale value. There are
|
127
|
+
# undoubtedly multiple methods for this conversion, but only a minor
|
128
|
+
# variant of the Adobe conversion method will be used:
|
129
|
+
#
|
130
|
+
# g = 1.0 - min(1.0, 0.299 * c + 0.587 * m + 0.114 * y + k)
|
131
|
+
#
|
132
|
+
# This treats the CMY values similarly to YIQ (NTSC) values and then
|
133
|
+
# adds the level of black. This is a variant of the Adobe version
|
134
|
+
# because it uses the more precise YIQ (NTSC) conversion values for Y
|
135
|
+
# (intensity) rather than the approximates provided by Adobe (0.3, 0.59,
|
136
|
+
# and 0.11).
|
137
|
+
def to_grayscale
|
138
|
+
c = 0.299 * @c.to_f
|
139
|
+
m = 0.587 * @m.to_f
|
140
|
+
y = 0.114 * @y.to_f
|
141
|
+
g = 1.0 - [1.0, c + m + y + @k].min
|
142
|
+
Color::GrayScale.from_fraction(g)
|
143
|
+
end
|
144
|
+
alias to_greyscale to_grayscale
|
145
|
+
|
146
|
+
def to_cmyk
|
147
|
+
self
|
148
|
+
end
|
149
|
+
|
150
|
+
# Converts to RGB then YIQ.
|
151
|
+
def to_yiq
|
152
|
+
to_rgb.to_yiq
|
153
|
+
end
|
154
|
+
|
155
|
+
# Converts to RGB then HSL.
|
156
|
+
def to_hsl
|
157
|
+
to_rgb.to_hsl
|
158
|
+
end
|
159
|
+
|
160
|
+
attr_reader :c, :m, :y, :k
|
161
|
+
|
162
|
+
def c=(cc) #:nodoc:
|
163
|
+
cc = 1.0 if cc > 1
|
164
|
+
cc = 0.0 if cc < 0
|
165
|
+
@c = cc
|
166
|
+
end
|
167
|
+
|
168
|
+
def m=(mm) #:nodoc:
|
169
|
+
mm = 1.0 if mm > 1
|
170
|
+
mm = 0.0 if mm < 0
|
171
|
+
@m = mm
|
172
|
+
end
|
173
|
+
|
174
|
+
def y=(yy) #:nodoc:
|
175
|
+
yy = 1.0 if yy > 1
|
176
|
+
yy = 0.0 if yy < 0
|
177
|
+
@y = yy
|
178
|
+
end
|
179
|
+
|
180
|
+
def k=(kk) #:nodoc:
|
181
|
+
kk = 1.0 if kk > 1
|
182
|
+
kk = 0.0 if kk < 0
|
183
|
+
@k = kk
|
184
|
+
end
|
185
|
+
end
|