Class Color::CMYK
In: lib/color.rb
lib/color/cmyk.rb
Parent: Object
Enumerable Gimp CMYK\n[lib/color.rb\nlib/color/cmyk.rb] GrayScale\n[lib/color.rb\nlib/color/grayscale.rb] RGB\n[lib/color.rb\nlib/color/rgb-colors.rb\nlib/color/rgb.rb] YIQ\n[lib/color.rb\nlib/color/yiq.rb] HSL MonoContrast lib/color/cmyk.rb lib/color/grayscale.rb lib/color/rgb.rb lib/color/yiq.rb lib/color/hsl.rb CSS lib/color/palette/gimp.rb lib/color/palette/monocontrast.rb Palette Color dot/m_9_0.png

An CMYK colour object. CMYK (cyan, magenta, yellow, and black) colours are based on additive percentages of ink. A CMYK colour of (0.3, 0, 0.8, 0.3) would be mixed from 30% cyan, 0% magenta, 80% yellow, and 30% black.

Methods

==   from_fraction   html   new   pdf_fill   pdf_stroke   to_cmyk   to_grayscale   to_greyscale   to_hsl   to_rgb   to_yiq  

Constants

PDF_FORMAT_STR = "%.3f %.3f %.3f %.3f %s"   The format of a DeviceCMYK colour for PDF. In color-tools 2.0 this will be removed from this package and added back as a modification by the PDF::Writer package.

Attributes

c  [RW] 
k  [RW] 
m  [RW] 
y  [RW] 

Public Class methods

Creates a CMYK colour object from fractional values 0..1.

  Color::CMYK.from_fraction(0.3, 0, 0.8, 0.3)

[Source]

    # File lib/color/cmyk.rb, line 41
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

Creates a CMYK colour object from percentages. Internally, the colour is managed as fractional values 0..1.

  Color::CMYK.from_fraction(30, 0, 80, 30)

[Source]

    # File lib/color/cmyk.rb, line 54
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

Public Instance methods

Compares the other colour to this one. The other colour will be converted to CMYK before comparison, so the comparison between a CMYK colour and a non-CMYK colour will be approximate and based on the other colour‘s to_cmyk conversion. If there is no to_cmyk conversion, this will raise an exception. This will report that two CMYK colours are equivalent if all component values are within 1e-4 (0.0001) of each other.

[Source]

    # File lib/color/cmyk.rb, line 29
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

Present the colour as an RGB HTML/CSS colour string. Note that this will perform a to_rgb operation using the default conversion formula.

[Source]

    # File lib/color/cmyk.rb, line 75
75:   def html
76:     to_rgb.html
77:   end

Present the colour as a DeviceCMYK fill colour string for PDF. This will be removed from the default package in color-tools 2.0.

[Source]

    # File lib/color/cmyk.rb, line 63
63:   def pdf_fill
64:     PDF_FORMAT_STR % [ @c, @m, @y, @k, "k" ]
65:   end

Present the colour as a DeviceCMYK stroke colour string for PDF. This will be removed from the default package in color-tools 2.0.

[Source]

    # File lib/color/cmyk.rb, line 69
69:   def pdf_stroke
70:     PDF_FORMAT_STR % [ @c, @m, @y, @k, "K" ]
71:   end

[Source]

     # File lib/color/cmyk.rb, line 146
146:   def to_cmyk
147:     self
148:   end

Converts the CMYK colour to a single greyscale value. There are undoubtedly multiple methods for this conversion, but only a minor variant of the Adobe conversion method will be used:

  g = 1.0 - min(1.0, 0.299 * c + 0.587 * m + 0.114 * y + k)

This treats the CMY values similarly to YIQ (NTSC) values and then adds the level of black. This is a variant of the Adobe version because it uses the more precise YIQ (NTSC) conversion values for Y (intensity) rather than the approximates provided by Adobe (0.3, 0.59, and 0.11).

[Source]

     # File lib/color/cmyk.rb, line 137
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
to_greyscale()

Alias for to_grayscale

Converts to RGB then HSL.

[Source]

     # File lib/color/cmyk.rb, line 156
156:   def to_hsl
157:     to_rgb.to_hsl
158:   end

Converts the CMYK colour to RGB. Most colour experts strongly suggest that this is not a good idea (some even suggesting that it‘s a very bad idea). CMYK represents additive percentages of inks on white paper, whereas RGB represents mixed colour intensities on a black screen.

However, the colour conversion can be done, and there are two different methods for the conversion that provide slightly different results. Adobe PDF conversions are done with the first form.

    # Adobe PDF Display Formula
  r = 1.0 - min(1.0, c + k)
  g = 1.0 - min(1.0, m + k)
  b = 1.0 - min(1.0, y + k)

    # Other
  r = 1.0 - (c * (1.0 - k) + k)
  g = 1.0 - (m * (1.0 - k) + k)
  b = 1.0 - (y * (1.0 - k) + k)

If we have a CMYK colour of [33% 66% 83% 25%], the first method will give an approximate RGB colour of (107, 23, 0) or 6b1700. The second method will give an approximate RGB colour of (128, 65, 33) or 804121. Which is correct? Although the colours may seem to be drastically different in the RGB colour space, they are very similar colours, differing mostly in intensity. The first is a darker, slightly redder brown; the second is a lighter brown.

Because of this subtlety, both methods are now offered for conversion in color-tools 1.2 or later. The Adobe method is not used by default; to enable it, pass true to to_rgb.

Future versions of color-tools may offer other conversion mechanisms that offer greater colour fidelity.

[Source]

     # File lib/color/cmyk.rb, line 113
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

Converts to RGB then YIQ.

[Source]

     # File lib/color/cmyk.rb, line 151
151:   def to_yiq
152:     to_rgb.to_yiq
153:   end

[Validate]