carrierwave-daltonize 0.0.3

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.
@@ -0,0 +1,18 @@
1
+ *.gem
2
+ *.swp
3
+ *.rbc
4
+ .bundle
5
+ .config
6
+ .yardoc
7
+ Gemfile.lock
8
+ InstalledFiles
9
+ _yardoc
10
+ coverage
11
+ doc/
12
+ lib/bundler/man
13
+ pkg
14
+ rdoc
15
+ spec/reports
16
+ test/tmp
17
+ test/version_tmp
18
+ tmp
@@ -0,0 +1,20 @@
1
+ # Version 0.0.3
2
+
3
+ * moved code into lib/daltonize.rb [Yoav Aner]
4
+ * fixed a few small bugs and tidy up the code [Yoav Aner]
5
+ * re-using daltonize.rb inside carrierwave plugin [Yoav Aner]
6
+ * Added Samples (readme + images) [Yoav Aner]
7
+ * updated Readme [Yoav Aner]
8
+ * getting ready to push to rubygems.org
9
+
10
+ # Version 0.0.2
11
+
12
+ * remove and reattach alpha, if necessary [John Cupitt]
13
+ * added cli implementation [John Cupitt]
14
+ * added nip2 implementation [John Cupitt]
15
+ * added test image [John Cupitt]
16
+ * small clarifications in comments [John Cupitt]
17
+
18
+ # Version 0.0.1
19
+
20
+ * first version!
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in carrierwave-daltonize.gemspec
4
+ gemspec
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2013 Yoav
2
+
3
+ MIT License
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining
6
+ a copy of this software and associated documentation files (the
7
+ "Software"), to deal in the Software without restriction, including
8
+ without limitation the rights to use, copy, modify, merge, publish,
9
+ distribute, sublicense, and/or sell copies of the Software, and to
10
+ permit persons to whom the Software is furnished to do so, subject to
11
+ the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -0,0 +1,82 @@
1
+ # CarrierWave::Daltonize
2
+
3
+ Adds [daltonize](http://www.daltonize.org/) processing to carrierwave (using ruby-vips).
4
+
5
+ [![original](/other/images/ishihara.png)](/other/samples.md)
6
+ Click to see processing samples
7
+
8
+ ## Installation
9
+
10
+ Requires ruby-vips. See https://github.com/jcupitt/ruby-vips
11
+
12
+ Add this line to your application's Gemfile:
13
+
14
+ gem 'carrierwave-daltonize', :git => 'git://github.com/gingerlime/carrierwave-daltonize.git'
15
+
16
+ And then execute:
17
+
18
+ $ bundle
19
+
20
+ Or install it yourself as:
21
+
22
+ $ gem install carrierwave-daltonize
23
+
24
+ ## Usage
25
+
26
+ In your carrierwave uploader, include carrierwave daltonize, and then use
27
+ any of the daltonize processing functions.
28
+
29
+ class ColourBlindUploader < CarrierWave::Uploader::Base
30
+ include CarrierWave::Daltonize
31
+
32
+ version :deuteranope
33
+ process :daltonize => :deuteranope
34
+ end
35
+
36
+ version :protanope
37
+ process :daltonize => :protanope
38
+ end
39
+
40
+ version :tritanope
41
+ process :daltonize => :tritanope
42
+ end
43
+ end
44
+
45
+ ### Standalone
46
+
47
+ You can also use the ruby code without carrierwave to process an image file.
48
+
49
+ Usage:
50
+
51
+ ./lib/daltonize.rb in.jpg out.jpg deuteranope
52
+
53
+ There's also a version of the algorithm in
54
+ [nip2](https://github.com/jcupitt/nip2) for easy testing of the
55
+ details of the parameters. See 'other' directory. Run with something like:
56
+
57
+ nip2 daltonize.ws
58
+
59
+ This workspace needs version 7.33 or later of nip2.
60
+
61
+ ## CarrierWave::VIPS
62
+
63
+ Note that CarrierWave::Daltonize no longer relies on [CarrierWave::VIPS](https://github.com/eltiare/carrierwave-vips). You can use it with any other CarrierWave plugin.
64
+
65
+ However, since you already need ruby-vips to run this, it would make sense to use it too.
66
+
67
+ CarrierWave::VIPS should dramatically increase the speed and reduce memory footprint
68
+ of your carrierwave image processing.
69
+
70
+ ## Contributors
71
+
72
+ * John Cupitt (@jcupitt) - created the ruby-vips algorithm and greatly improved the python/javascript implementations
73
+ * Oliver Siemoneit - created the original python code for MoinMoin
74
+ * Yoav Aner (@gingerlime) - adapted the code and wrapped it into this Gem
75
+
76
+ ## Contributing
77
+
78
+ 1. Fork it
79
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
80
+ 3. Commit your changes (`git commit -am 'Add some feature'`)
81
+ 4. Push to the branch (`git push origin my-new-feature`)
82
+ 5. Create new Pull Request
@@ -0,0 +1 @@
1
+ require "bundler/gem_tasks"
@@ -0,0 +1,21 @@
1
+ # -*- encoding: utf-8 -*-
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'carrierwave-daltonize/version'
5
+
6
+ Gem::Specification.new do |gem|
7
+ gem.name = "carrierwave-daltonize"
8
+ gem.version = Carrierwave::Daltonize::VERSION
9
+ gem.authors = ["Yoav Aner", "John Cupitt"]
10
+ gem.email = ["yoav@gingerlime.com"]
11
+ gem.description = %q{Carrierwave VIPS Daltonize processing}
12
+ gem.summary = %q{Adds daltonize processing for converting images to help colour-blindness. Using the ruby-vips implmentation}
13
+ gem.homepage = ""
14
+
15
+ gem.files = `git ls-files`.split($/)
16
+ gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
17
+ gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
18
+ gem.require_paths = ["lib"]
19
+ gem.add_runtime_dependency 'ruby-vips', '>=0.2.0'
20
+
21
+ end
@@ -0,0 +1,33 @@
1
+ require "carrierwave-daltonize/version"
2
+ require "daltonize"
3
+
4
+ module CarrierWave
5
+ module Daltonize
6
+
7
+ def self.included(base)
8
+ base.send(:extend, ClassMethods)
9
+ end
10
+
11
+ module ClassMethods
12
+
13
+ def daltonize(proc_type)
14
+ process :daltonize => proc_type
15
+ end
16
+
17
+ end
18
+
19
+ # daltonize an image file for carrierwave
20
+ # proc_type - the processing type (deuteranope, protanope or tritanope)
21
+ def daltonize(proc_type)
22
+ cache_stored_file! unless cached?
23
+ tmp_name = current_path.sub(/(\.[a-z]+)$/i, '_tmp\1')
24
+
25
+ ::Daltonize.daltonize_file(current_path, tmp_name, proc_type)
26
+
27
+ FileUtils.mv(tmp_name, current_path)
28
+ rescue => e
29
+ raise CarrierWave::ProcessingError.new("Failed to manipulate file. Original Error: #{e}")
30
+ end
31
+
32
+ end
33
+ end
@@ -0,0 +1,5 @@
1
+ module Carrierwave
2
+ module Daltonize
3
+ VERSION = "0.0.3"
4
+ end
5
+ end
@@ -0,0 +1,139 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ # run the carrierwave-daltonize filter from the command-line
4
+ # or include it in other ruby programs, e.g.
5
+ #
6
+ # ::Daltonize.daltonize_file(source, destination, :deuteranope)
7
+ #
8
+ # - or -
9
+ #
10
+ # im = VIPS::Image.new(source)
11
+ # im = ::Daltonize.tritanope(im)
12
+ # im.write(destination)
13
+
14
+ require 'rubygems'
15
+ require 'vips'
16
+
17
+ module Daltonize
18
+
19
+ def self.daltonize (image, simulate, distribute)
20
+ # remove any alpha channel before processing
21
+ alpha = nil
22
+ if image.bands == 4
23
+ alpha = image.extract_band(3)
24
+ image = image.extract_band(0, 3)
25
+ end
26
+
27
+ begin
28
+ # import to CIELAB with lcms
29
+ # if there's no profile there, we'll fall back to the thing below
30
+ cielab = image.icc_import_embedded(:relative)
31
+ xyz = cielab.lab_to_xyz()
32
+ rescue VIPS::Error
33
+ # nope .. use the built-in srgb converter instead
34
+ xyz = image.srgb_to_xyz()
35
+ cielab = xyz.xyz_to_lab()
36
+ end
37
+
38
+ # to bradford cone space (a variant of LMS)
39
+ brad = xyz.recomb([[0.8951, 0.2664, -0.1614],
40
+ [-0.7502, 1.7135, 0.0367],
41
+ [0.0389, -0.0685, 1.0296]])
42
+
43
+ # through the color-vision deficit matrix
44
+ simu = brad.recomb(simulate)
45
+
46
+ # back to xyz (this is the inverse of the brad matrix above)
47
+ xyz2 = simu.recomb([[0.987, -0.147, 0.16],
48
+ [0.432, 0.5184, 0.0493],
49
+ [-0.0085, 0.04, 0.968]])
50
+
51
+ # now find the error in CIELAB
52
+ cielab2 = xyz2.xyz_to_lab()
53
+ err = cielab - cielab2
54
+
55
+ # add the error channels back to the original, recombined so as to hit
56
+ # channels the person is sensitive to
57
+ cielab = cielab + err.recomb(distribute)
58
+
59
+ # .. and back to sRGB
60
+ image = cielab.lab_to_xyz().xyz_to_srgb()
61
+
62
+ # reattach any alpha we saved above
63
+ if alpha
64
+ image = image.bandjoin(alpha.clip2fmt(image.band_fmt))
65
+ end
66
+
67
+ return image
68
+ end
69
+
70
+ def self.deuteranope(image)
71
+ # deuteranopes are missing green receptors, so to simulate their vision
72
+ # we replace the green signal with a 70/30 mix of red and blue
73
+ #
74
+ # to compensate, we put 50% of the red/green error into lightness and 100%
75
+ # into yellow/blue
76
+ self.daltonize(image,
77
+ [[ 1, 0, 0],
78
+ [0.7, 0, 0.3],
79
+ [ 0, 0, 1]],
80
+ [[ 1, 0.5, 0],
81
+ [ 0, 0, 0],
82
+ [ 0, 1, 1]])
83
+ end
84
+
85
+ def self.protanope(image)
86
+ # protanopes are missing red receptors --- we simulate their condition by
87
+ # replacing the red signal with an 80/20 mix of green and blue (since
88
+ # blue is far less important than green)
89
+ #
90
+ # compensate as for deuts
91
+ self.daltonize(image,
92
+ [[ 0, 0.8, 0.2],
93
+ [ 0, 1, 0],
94
+ [ 0, 0, 1]],
95
+ [[ 1, 0.5, 0],
96
+ [ 0, 0, 0],
97
+ [ 0, 1, 1]])
98
+ end
99
+
100
+ def self.tritanope(image)
101
+ # tritanopes are missing blue receptors --- we replace the blue signal
102
+ # with 30/70 red/green
103
+ #
104
+ # to compensate, we put 50% of the yellow/blue error into lightness, and
105
+ # 100% into red/green
106
+ self.daltonize(image,
107
+ [[ 1, 0, 0],
108
+ [ 0, 1, 0],
109
+ [0.3, 0.7, 0]],
110
+ [[ 1, 0, 0.5],
111
+ [ 0, 0, 1],
112
+ [ 0, 0, 0]])
113
+ end
114
+
115
+ def self.daltonize_file(source, destination, type)
116
+ im = VIPS::Image.new(source)
117
+ im = self.send(type.to_sym, im)
118
+ im.write(destination)
119
+ end
120
+
121
+ end
122
+
123
+ types = [:deuteranope, :protanope, :tritanope]
124
+
125
+ if __FILE__ == $0
126
+ if ARGV.length != 3
127
+ puts "usage: daltonize INFILE OUTFILE TYPE"
128
+ puts "where TYPE is one of #{types.join(', ')}"
129
+ exit 1
130
+ end
131
+
132
+ unless types.include?(ARGV[2].to_sym)
133
+ puts "#{ARGV[2]} is not one of #{types.join(', ')}"
134
+ exit 1
135
+ end
136
+
137
+ Daltonize.daltonize_file(ARGV[0], ARGV[1], ARGV[2])
138
+
139
+ end
@@ -0,0 +1,555 @@
1
+ <?xml version="1.0"?>
2
+ <root xmlns="http://www.vips.ecs.soton.ac.uk/nip/7.33.0">
3
+ <Workspace window_x="51" window_y="29" window_width="728" window_height="1050" view="WORKSPACE_MODE_REGULAR" scale="1" offset="0" lpane_position="100" lpane_open="false" rpane_position="400" rpane_open="false" local_defs="// private definitions for this workspace&#10;" name="images" caption="Default empty tab" filename="$HOME/GIT/carrierwave-daltonize/other/daltonize.ws">
4
+ <Column x="0" y="0" open="true" selected="false" sform="false" next="9" name="A" caption="import">
5
+ <Subcolumn vislevel="3">
6
+ <Row popup="false" name="A1">
7
+ <Rhs vislevel="1" flags="1">
8
+ <iImage image_left="0" image_top="0" image_mag="0" show_status="false" show_paintbox="false" show_convert="false" show_rulers="false" scale="0" offset="0" falsecolour="false" type="true"/>
9
+ <Subcolumn vislevel="0"/>
10
+ <iText formula="Image_file &quot;$HOME/GIT/carrierwave-daltonize/other/images/macbeth.jpg&quot;"/>
11
+ </Rhs>
12
+ </Row>
13
+ <Row popup="false" name="A2">
14
+ <Rhs vislevel="3" flags="7">
15
+ <iImage image_left="0" image_top="0" image_mag="0" show_status="false" show_paintbox="false" show_convert="false" show_rulers="false" scale="0" offset="0" falsecolour="false" type="true"/>
16
+ <Subcolumn vislevel="1">
17
+ <Row name="x">
18
+ <Rhs vislevel="0" flags="4">
19
+ <iText/>
20
+ </Rhs>
21
+ </Row>
22
+ <Row name="super">
23
+ <Rhs vislevel="0" flags="4">
24
+ <iImage image_left="0" image_top="0" image_mag="0" show_status="false" show_paintbox="false" show_convert="false" show_rulers="false" scale="0" offset="0" falsecolour="false" type="true"/>
25
+ <Subcolumn vislevel="0"/>
26
+ <iText/>
27
+ </Rhs>
28
+ </Row>
29
+ <Row name="embedded">
30
+ <Rhs vislevel="1" flags="1">
31
+ <Toggle caption="Use embedded profile if possible" value="true"/>
32
+ <Subcolumn vislevel="0"/>
33
+ <iText/>
34
+ </Rhs>
35
+ </Row>
36
+ <Row name="profile">
37
+ <Rhs vislevel="1" flags="1">
38
+ <Pathname/>
39
+ <Subcolumn vislevel="0"/>
40
+ <iText/>
41
+ </Rhs>
42
+ </Row>
43
+ <Row name="intent">
44
+ <Rhs vislevel="1" flags="1">
45
+ <Option caption="Render intent" labelsn="4" labels0="Perceptual" labels1="Relative" labels2="Saturation" labels3="Absolute" value="1"/>
46
+ <Subcolumn vislevel="0"/>
47
+ <iText/>
48
+ </Rhs>
49
+ </Row>
50
+ </Subcolumn>
51
+ <iText formula="Colour_icc_item.Import_item.action A1"/>
52
+ </Rhs>
53
+ </Row>
54
+ </Subcolumn>
55
+ </Column>
56
+ <Column x="438" y="0" open="true" selected="false" sform="false" next="3" name="F" caption="results">
57
+ <Subcolumn vislevel="3">
58
+ <Row popup="false" name="F2">
59
+ <Rhs vislevel="2" flags="5">
60
+ <iImage window_x="1" window_y="29" window_width="724" window_height="858" image_left="177" image_top="195" image_mag="2" show_status="true" show_paintbox="false" show_convert="false" show_rulers="false" scale="1" offset="0" falsecolour="false" type="true"/>
61
+ <Subcolumn vislevel="0"/>
62
+ <iText formula="deuteranope.C5"/>
63
+ </Rhs>
64
+ </Row>
65
+ <Row popup="false" name="F1">
66
+ <Rhs vislevel="2" flags="5">
67
+ <iImage image_left="0" image_top="0" image_mag="0" show_status="false" show_paintbox="false" show_convert="false" show_rulers="false" scale="0" offset="0" falsecolour="false" type="true"/>
68
+ <Subcolumn vislevel="0"/>
69
+ <iText formula="protanope.C5"/>
70
+ </Rhs>
71
+ </Row>
72
+ <Row popup="false" name="F3">
73
+ <Rhs vislevel="2" flags="5">
74
+ <iImage image_left="0" image_top="0" image_mag="0" show_status="false" show_paintbox="false" show_convert="false" show_rulers="false" scale="0" offset="0" falsecolour="false" type="true"/>
75
+ <Subcolumn vislevel="0"/>
76
+ <iText formula="tritanope.C5"/>
77
+ </Rhs>
78
+ </Row>
79
+ </Subcolumn>
80
+ </Column>
81
+ <Column x="1211" y="0" open="true" selected="false" sform="false" next="5" name="H" caption="as a grid">
82
+ <Subcolumn vislevel="3">
83
+ <Row popup="false" name="H1">
84
+ <Rhs vislevel="2" flags="4">
85
+ <iText formula="[[A1, I1],[I2, I3]]"/>
86
+ </Rhs>
87
+ </Row>
88
+ <Row popup="false" name="H4">
89
+ <Rhs vislevel="3" flags="7">
90
+ <iImage window_x="852" window_y="185" window_width="462" window_height="677" image_left="1120" image_top="1505" image_mag="-5" show_status="true" show_paintbox="false" show_convert="false" show_rulers="false" scale="1" offset="0" falsecolour="false" type="true"/>
91
+ <Subcolumn vislevel="1">
92
+ <Row name="x">
93
+ <Rhs vislevel="0" flags="4">
94
+ <iText/>
95
+ </Rhs>
96
+ </Row>
97
+ <Row name="super">
98
+ <Rhs vislevel="0" flags="4">
99
+ <iImage image_left="0" image_top="0" image_mag="0" show_status="false" show_paintbox="false" show_convert="false" show_rulers="false" scale="0" offset="0" falsecolour="false" type="true"/>
100
+ <Subcolumn vislevel="0"/>
101
+ <iText/>
102
+ </Rhs>
103
+ </Row>
104
+ <Row name="hshim">
105
+ <Rhs vislevel="1" flags="1">
106
+ <Slider caption="Horizontal spacing" from="-100" to="100" value="50"/>
107
+ <Subcolumn vislevel="0"/>
108
+ <iText/>
109
+ </Rhs>
110
+ </Row>
111
+ <Row name="vshim">
112
+ <Rhs vislevel="1" flags="1">
113
+ <Slider caption="Vertical spacing" from="-100" to="100" value="50"/>
114
+ <Subcolumn vislevel="0"/>
115
+ <iText/>
116
+ </Rhs>
117
+ </Row>
118
+ <Row name="bg_colour">
119
+ <Rhs vislevel="1" flags="1">
120
+ <Expression caption="Background colour"/>
121
+ <Subcolumn vislevel="0"/>
122
+ <iText/>
123
+ </Rhs>
124
+ </Row>
125
+ <Row name="halign">
126
+ <Rhs vislevel="1" flags="1">
127
+ <Option/>
128
+ <Subcolumn vislevel="0"/>
129
+ <iText/>
130
+ </Rhs>
131
+ </Row>
132
+ <Row name="valign">
133
+ <Rhs vislevel="1" flags="1">
134
+ <Option/>
135
+ <Subcolumn vislevel="0"/>
136
+ <iText/>
137
+ </Rhs>
138
+ </Row>
139
+ </Subcolumn>
140
+ <iText formula="Image_join_item.Array_item.action H1"/>
141
+ </Rhs>
142
+ </Row>
143
+ </Subcolumn>
144
+ </Column>
145
+ <Column x="736" y="0" open="true" selected="true" sform="false" next="2" name="I" caption="export">
146
+ <Subcolumn vislevel="3">
147
+ <Row popup="false" name="I1">
148
+ <Rhs vislevel="3" flags="7">
149
+ <iImage image_left="0" image_top="0" image_mag="0" show_status="false" show_paintbox="false" show_convert="false" show_rulers="false" scale="0" offset="0" falsecolour="false" type="true"/>
150
+ <Subcolumn vislevel="1"/>
151
+ <iText formula="Colour_convert_item.sRGB_item.action F2"/>
152
+ </Rhs>
153
+ </Row>
154
+ <Row popup="false" name="I2">
155
+ <Rhs vislevel="3" flags="7">
156
+ <iImage image_left="0" image_top="0" image_mag="0" show_status="false" show_paintbox="false" show_convert="false" show_rulers="false" scale="0" offset="0" falsecolour="false" type="true"/>
157
+ <Subcolumn vislevel="1"/>
158
+ <iText formula="Colour_convert_item.sRGB_item.action F1"/>
159
+ </Rhs>
160
+ </Row>
161
+ <Row popup="false" name="I3">
162
+ <Rhs vislevel="3" flags="7">
163
+ <iImage image_left="0" image_top="0" image_mag="0" show_status="false" show_paintbox="false" show_convert="false" show_rulers="false" scale="0" offset="0" falsecolour="false" type="true"/>
164
+ <Subcolumn vislevel="1"/>
165
+ <iText formula="Colour_convert_item.sRGB_item.action F3"/>
166
+ </Rhs>
167
+ </Row>
168
+ </Subcolumn>
169
+ </Column>
170
+ </Workspace>
171
+ <Workspace window_x="51" window_y="29" window_width="728" window_height="1050" view="WORKSPACE_MODE_REGULAR" scale="1" offset="0" lpane_position="100" lpane_open="false" rpane_position="400" rpane_open="false" local_defs="// private definitions for this workspace&#10;" name="deuteranope" caption="Default empty tab" filename="$HOME/GIT/carrierwave-daltonize/other/daltonize.ws">
172
+ <Column x="0" y="0" open="true" selected="false" sform="false" next="1" name="B" caption="simulate colourblindness">
173
+ <Subcolumn vislevel="3">
174
+ <Row popup="false" name="B2">
175
+ <Rhs vislevel="2" flags="5">
176
+ <iImage image_left="0" image_top="0" image_mag="0" show_status="false" show_paintbox="false" show_convert="false" show_rulers="false" scale="0" offset="0" falsecolour="false" type="true"/>
177
+ <Subcolumn vislevel="0"/>
178
+ <iText formula="images.A2"/>
179
+ </Rhs>
180
+ </Row>
181
+ <Row popup="false" name="B3">
182
+ <Rhs vislevel="3" flags="7">
183
+ <iImage image_left="0" image_top="0" image_mag="0" show_status="false" show_paintbox="false" show_convert="false" show_rulers="false" scale="0" offset="0" falsecolour="false" type="true"/>
184
+ <Subcolumn vislevel="1"/>
185
+ <iText formula="Colour_convert_item.XYZ_item.action B2"/>
186
+ </Rhs>
187
+ </Row>
188
+ <Row popup="false" name="B4">
189
+ <Rhs vislevel="2" flags="5">
190
+ <iImage image_left="0" image_top="0" image_mag="0" show_status="false" show_paintbox="false" show_convert="false" show_rulers="false" scale="0" offset="0" falsecolour="false" type="true"/>
191
+ <Subcolumn vislevel="0"/>
192
+ <iText formula="recomb XYZ2RGBbrad B3"/>
193
+ </Rhs>
194
+ </Row>
195
+ <Row popup="false" name="B5">
196
+ <Rhs vislevel="3" flags="7">
197
+ <iImage window_x="975" window_y="546" window_width="477" window_height="333" image_left="693" image_top="387" image_mag="-3" show_status="true" show_paintbox="false" show_convert="false" show_rulers="false" scale="1" offset="0" falsecolour="false" type="true"/>
198
+ <Subcolumn vislevel="1">
199
+ <Row name="x">
200
+ <Rhs vislevel="0" flags="4">
201
+ <iText/>
202
+ </Rhs>
203
+ </Row>
204
+ <Row name="super">
205
+ <Rhs vislevel="0" flags="4">
206
+ <iImage image_left="0" image_top="0" image_mag="0" show_status="false" show_paintbox="false" show_convert="false" show_rulers="false" scale="0" offset="0" falsecolour="false" type="true"/>
207
+ <Subcolumn vislevel="0"/>
208
+ <iText/>
209
+ </Rhs>
210
+ </Row>
211
+ <Row name="matrix">
212
+ <Rhs vislevel="1" flags="1">
213
+ <Matrix valuen="9" value0="1" value1="0" value2="0" value3="0.69999999999999996" value4="0" value5="0.29999999999999999" value6="0" value7="0" value8="1" width="3" height="3" scale="1" offset="0" filename="" display="1"/>
214
+ <Subcolumn vislevel="0"/>
215
+ <iText/>
216
+ </Rhs>
217
+ </Row>
218
+ </Subcolumn>
219
+ <iText formula="Colour_adjust_item.Recombination_item.action B4"/>
220
+ </Rhs>
221
+ </Row>
222
+ <Row popup="false" name="B6">
223
+ <Rhs vislevel="2" flags="5">
224
+ <iImage window_x="1" window_y="29" window_width="909" window_height="766" image_left="447" image_top="345" image_mag="1" show_status="true" show_paintbox="false" show_convert="false" show_rulers="false" scale="1" offset="0" falsecolour="false" type="true"/>
225
+ <Subcolumn vislevel="0"/>
226
+ <iText formula="recomb RGBbrad2XYZ B5"/>
227
+ </Rhs>
228
+ </Row>
229
+ <Row popup="false" name="B7">
230
+ <Rhs vislevel="3" flags="7">
231
+ <iImage image_left="0" image_top="0" image_mag="0" show_status="false" show_paintbox="false" show_convert="false" show_rulers="false" scale="0" offset="0" falsecolour="false" type="true"/>
232
+ <Subcolumn vislevel="1"/>
233
+ <iText formula="Colour_convert_item.Lab_item.action B6"/>
234
+ </Rhs>
235
+ </Row>
236
+ </Subcolumn>
237
+ </Column>
238
+ <Column x="576" y="0" open="true" selected="false" sform="false" next="6" name="C" caption="find error, add back to original">
239
+ <Subcolumn vislevel="3">
240
+ <Row popup="false" name="C1">
241
+ <Rhs vislevel="2" flags="5">
242
+ <iImage image_left="0" image_top="0" image_mag="0" show_status="false" show_paintbox="false" show_convert="false" show_rulers="false" scale="0" offset="0" falsecolour="false" type="true"/>
243
+ <Subcolumn vislevel="0"/>
244
+ <iText formula="B2"/>
245
+ </Rhs>
246
+ </Row>
247
+ <Row popup="false" name="C2">
248
+ <Rhs vislevel="2" flags="5">
249
+ <iImage image_left="0" image_top="0" image_mag="0" show_status="false" show_paintbox="false" show_convert="false" show_rulers="false" scale="0" offset="0" falsecolour="false" type="true"/>
250
+ <Subcolumn vislevel="0"/>
251
+ <iText formula="B7"/>
252
+ </Rhs>
253
+ </Row>
254
+ <Row popup="false" name="C3">
255
+ <Rhs vislevel="2" flags="5">
256
+ <iImage window_x="0" window_y="29" window_width="1019" window_height="843" image_left="492" image_top="356" image_mag="1" show_status="true" show_paintbox="false" show_convert="true" show_rulers="true" scale="20" offset="0" falsecolour="false" type="true"/>
257
+ <Subcolumn vislevel="0"/>
258
+ <iText formula="C2 - C1"/>
259
+ </Rhs>
260
+ </Row>
261
+ <Row popup="false" name="C4">
262
+ <Rhs vislevel="3" flags="7">
263
+ <iImage window_x="0" window_y="29" window_width="1016" window_height="839" image_left="491" image_top="354" image_mag="1" show_status="true" show_paintbox="false" show_convert="true" show_rulers="true" scale="20" offset="0" falsecolour="false" type="true"/>
264
+ <Subcolumn vislevel="1">
265
+ <Row name="x">
266
+ <Rhs vislevel="0" flags="4">
267
+ <iText/>
268
+ </Rhs>
269
+ </Row>
270
+ <Row name="super">
271
+ <Rhs vislevel="0" flags="4">
272
+ <iImage image_left="0" image_top="0" image_mag="0" show_status="false" show_paintbox="false" show_convert="false" show_rulers="false" scale="0" offset="0" falsecolour="false" type="true"/>
273
+ <Subcolumn vislevel="0"/>
274
+ <iText/>
275
+ </Rhs>
276
+ </Row>
277
+ <Row name="matrix">
278
+ <Rhs vislevel="1" flags="1">
279
+ <Matrix valuen="9" value0="1" value1="0.5" value2="0" value3="0" value4="0" value5="0" value6="0" value7="1" value8="1" width="3" height="3" scale="1" offset="0" filename="" display="1"/>
280
+ <Subcolumn vislevel="0"/>
281
+ <iText/>
282
+ </Rhs>
283
+ </Row>
284
+ </Subcolumn>
285
+ <iText formula="Colour_adjust_item.Recombination_item.action C3"/>
286
+ </Rhs>
287
+ </Row>
288
+ <Row popup="false" name="C5">
289
+ <Rhs vislevel="2" flags="5">
290
+ <iImage window_x="246" window_y="429" window_width="948" window_height="853" image_left="457" image_top="361" image_mag="1" show_status="true" show_paintbox="false" show_convert="true" show_rulers="true" scale="1" offset="0" falsecolour="false" type="true"/>
291
+ <Subcolumn vislevel="0"/>
292
+ <iText formula="C1 + C4"/>
293
+ </Rhs>
294
+ </Row>
295
+ </Subcolumn>
296
+ </Column>
297
+ </Workspace>
298
+ <Workspace window_x="51" window_y="29" window_width="728" window_height="1050" view="WORKSPACE_MODE_REGULAR" scale="1" offset="0" lpane_position="100" lpane_open="false" rpane_position="400" rpane_open="false" local_defs="// private definitions for this workspace&#10;" name="protanope" caption="Default empty tab" filename="$HOME/GIT/carrierwave-daltonize/other/daltonize.ws">
299
+ <Column x="0" y="0" open="true" selected="true" sform="false" next="1" name="B" caption="simulate colourblindness">
300
+ <Subcolumn vislevel="3">
301
+ <Row popup="false" name="B2">
302
+ <Rhs vislevel="2" flags="5">
303
+ <iImage image_left="0" image_top="0" image_mag="0" show_status="false" show_paintbox="false" show_convert="false" show_rulers="false" scale="0" offset="0" falsecolour="false" type="true"/>
304
+ <Subcolumn vislevel="0"/>
305
+ <iText formula="images.A2"/>
306
+ </Rhs>
307
+ </Row>
308
+ <Row popup="false" name="B3">
309
+ <Rhs vislevel="3" flags="7">
310
+ <iImage image_left="0" image_top="0" image_mag="0" show_status="false" show_paintbox="false" show_convert="false" show_rulers="false" scale="0" offset="0" falsecolour="false" type="true"/>
311
+ <Subcolumn vislevel="1"/>
312
+ <iText formula="Colour_convert_item.XYZ_item.action B2"/>
313
+ </Rhs>
314
+ </Row>
315
+ <Row popup="false" name="B4">
316
+ <Rhs vislevel="2" flags="5">
317
+ <iImage image_left="0" image_top="0" image_mag="0" show_status="false" show_paintbox="false" show_convert="false" show_rulers="false" scale="0" offset="0" falsecolour="false" type="true"/>
318
+ <Subcolumn vislevel="0"/>
319
+ <iText formula="recomb XYZ2RGBbrad B3"/>
320
+ </Rhs>
321
+ </Row>
322
+ <Row popup="false" name="B5">
323
+ <Rhs vislevel="3" flags="7">
324
+ <iImage image_left="0" image_top="0" image_mag="0" show_status="false" show_paintbox="false" show_convert="false" show_rulers="false" scale="0" offset="0" falsecolour="false" type="true"/>
325
+ <Subcolumn vislevel="1">
326
+ <Row name="x">
327
+ <Rhs vislevel="0" flags="4">
328
+ <iText/>
329
+ </Rhs>
330
+ </Row>
331
+ <Row name="super">
332
+ <Rhs vislevel="0" flags="4">
333
+ <iImage image_left="0" image_top="0" image_mag="0" show_status="false" show_paintbox="false" show_convert="false" show_rulers="false" scale="0" offset="0" falsecolour="false" type="true"/>
334
+ <Subcolumn vislevel="0"/>
335
+ <iText/>
336
+ </Rhs>
337
+ </Row>
338
+ <Row name="matrix">
339
+ <Rhs vislevel="1" flags="1">
340
+ <Matrix valuen="9" value0="0" value1="0.80000000000000004" value2="0.20000000000000001" value3="0" value4="1" value5="0" value6="0" value7="0" value8="1" width="3" height="3" scale="1" offset="0" filename="" display="1"/>
341
+ <Subcolumn vislevel="0"/>
342
+ <iText/>
343
+ </Rhs>
344
+ </Row>
345
+ </Subcolumn>
346
+ <iText formula="Colour_adjust_item.Recombination_item.action B4"/>
347
+ </Rhs>
348
+ </Row>
349
+ <Row popup="false" name="B6">
350
+ <Rhs vislevel="2" flags="5">
351
+ <iImage image_left="0" image_top="0" image_mag="0" show_status="false" show_paintbox="false" show_convert="false" show_rulers="false" scale="0" offset="0" falsecolour="false" type="true"/>
352
+ <Subcolumn vislevel="0"/>
353
+ <iText formula="recomb RGBbrad2XYZ B5"/>
354
+ </Rhs>
355
+ </Row>
356
+ <Row popup="false" name="B7">
357
+ <Rhs vislevel="3" flags="7">
358
+ <iImage image_left="0" image_top="0" image_mag="0" show_status="false" show_paintbox="false" show_convert="false" show_rulers="false" scale="0" offset="0" falsecolour="false" type="true"/>
359
+ <Subcolumn vislevel="1"/>
360
+ <iText formula="Colour_convert_item.Lab_item.action B6"/>
361
+ </Rhs>
362
+ </Row>
363
+ </Subcolumn>
364
+ </Column>
365
+ <Column x="576" y="0" open="true" selected="false" sform="false" next="6" name="C" caption="find error, add back to original">
366
+ <Subcolumn vislevel="3">
367
+ <Row popup="false" name="C1">
368
+ <Rhs vislevel="2" flags="5">
369
+ <iImage image_left="0" image_top="0" image_mag="0" show_status="false" show_paintbox="false" show_convert="false" show_rulers="false" scale="0" offset="0" falsecolour="false" type="true"/>
370
+ <Subcolumn vislevel="0"/>
371
+ <iText formula="B2"/>
372
+ </Rhs>
373
+ </Row>
374
+ <Row popup="false" name="C2">
375
+ <Rhs vislevel="2" flags="5">
376
+ <iImage image_left="0" image_top="0" image_mag="0" show_status="false" show_paintbox="false" show_convert="false" show_rulers="false" scale="0" offset="0" falsecolour="false" type="true"/>
377
+ <Subcolumn vislevel="0"/>
378
+ <iText formula="B7"/>
379
+ </Rhs>
380
+ </Row>
381
+ <Row popup="false" name="C3">
382
+ <Rhs vislevel="2" flags="5">
383
+ <iImage window_x="0" window_y="29" window_width="477" window_height="333" image_left="221" image_top="101" image_mag="1" show_status="true" show_paintbox="false" show_convert="true" show_rulers="true" scale="20" offset="0" falsecolour="false" type="true"/>
384
+ <Subcolumn vislevel="0"/>
385
+ <iText formula="C2 - C1"/>
386
+ </Rhs>
387
+ </Row>
388
+ <Row popup="false" name="C4">
389
+ <Rhs vislevel="3" flags="7">
390
+ <iImage window_x="0" window_y="29" window_width="477" window_height="333" image_left="221" image_top="101" image_mag="1" show_status="true" show_paintbox="false" show_convert="true" show_rulers="true" scale="20" offset="0" falsecolour="false" type="true"/>
391
+ <Subcolumn vislevel="1">
392
+ <Row name="x">
393
+ <Rhs vislevel="0" flags="4">
394
+ <iText/>
395
+ </Rhs>
396
+ </Row>
397
+ <Row name="super">
398
+ <Rhs vislevel="0" flags="4">
399
+ <iImage image_left="0" image_top="0" image_mag="0" show_status="false" show_paintbox="false" show_convert="false" show_rulers="false" scale="0" offset="0" falsecolour="false" type="true"/>
400
+ <Subcolumn vislevel="0"/>
401
+ <iText/>
402
+ </Rhs>
403
+ </Row>
404
+ <Row name="matrix">
405
+ <Rhs vislevel="1" flags="1">
406
+ <Matrix valuen="9" value0="1" value1="0.5" value2="0" value3="0" value4="0" value5="0" value6="0" value7="1" value8="1" width="3" height="3" scale="1" offset="0" filename="" display="1"/>
407
+ <Subcolumn vislevel="0"/>
408
+ <iText/>
409
+ </Rhs>
410
+ </Row>
411
+ </Subcolumn>
412
+ <iText formula="Colour_adjust_item.Recombination_item.action C3"/>
413
+ </Rhs>
414
+ </Row>
415
+ <Row popup="false" name="C5">
416
+ <Rhs vislevel="2" flags="5">
417
+ <iImage image_left="0" image_top="0" image_mag="0" show_status="false" show_paintbox="false" show_convert="false" show_rulers="false" scale="0" offset="0" falsecolour="false" type="true"/>
418
+ <Subcolumn vislevel="0"/>
419
+ <iText formula="C1 + C4"/>
420
+ </Rhs>
421
+ </Row>
422
+ </Subcolumn>
423
+ </Column>
424
+ </Workspace>
425
+ <Workspace window_x="51" window_y="29" window_width="728" window_height="1050" view="WORKSPACE_MODE_REGULAR" scale="1" offset="0" lpane_position="100" lpane_open="false" rpane_position="400" rpane_open="false" local_defs="// private definitions for this workspace&#10;" name="tritanope" caption="Default empty tab" filename="$HOME/GIT/carrierwave-daltonize/other/daltonize.ws">
426
+ <Column x="0" y="0" open="true" selected="true" sform="false" next="1" name="B" caption="simulate colourblindness">
427
+ <Subcolumn vislevel="3">
428
+ <Row popup="false" name="B2">
429
+ <Rhs vislevel="2" flags="5">
430
+ <iImage image_left="0" image_top="0" image_mag="0" show_status="false" show_paintbox="false" show_convert="false" show_rulers="false" scale="0" offset="0" falsecolour="false" type="true"/>
431
+ <Subcolumn vislevel="0"/>
432
+ <iText formula="images.A2"/>
433
+ </Rhs>
434
+ </Row>
435
+ <Row popup="false" name="B3">
436
+ <Rhs vislevel="3" flags="7">
437
+ <iImage image_left="0" image_top="0" image_mag="0" show_status="false" show_paintbox="false" show_convert="false" show_rulers="false" scale="0" offset="0" falsecolour="false" type="true"/>
438
+ <Subcolumn vislevel="1"/>
439
+ <iText formula="Colour_convert_item.XYZ_item.action B2"/>
440
+ </Rhs>
441
+ </Row>
442
+ <Row popup="false" name="B4">
443
+ <Rhs vislevel="2" flags="5">
444
+ <iImage image_left="0" image_top="0" image_mag="0" show_status="false" show_paintbox="false" show_convert="false" show_rulers="false" scale="0" offset="0" falsecolour="false" type="true"/>
445
+ <Subcolumn vislevel="0"/>
446
+ <iText formula="recomb XYZ2RGBbrad B3"/>
447
+ </Rhs>
448
+ </Row>
449
+ <Row popup="false" name="B5">
450
+ <Rhs vislevel="3" flags="7">
451
+ <iImage window_x="0" window_y="29" window_width="750" window_height="750" image_left="358" image_top="309" image_mag="1" show_status="true" show_paintbox="false" show_convert="true" show_rulers="true" scale="1" offset="0" falsecolour="false" type="true"/>
452
+ <Subcolumn vislevel="1">
453
+ <Row name="x">
454
+ <Rhs vislevel="0" flags="4">
455
+ <iText/>
456
+ </Rhs>
457
+ </Row>
458
+ <Row name="super">
459
+ <Rhs vislevel="0" flags="4">
460
+ <iImage image_left="0" image_top="0" image_mag="0" show_status="false" show_paintbox="false" show_convert="false" show_rulers="false" scale="0" offset="0" falsecolour="false" type="true"/>
461
+ <Subcolumn vislevel="0"/>
462
+ <iText/>
463
+ </Rhs>
464
+ </Row>
465
+ <Row name="matrix">
466
+ <Rhs vislevel="1" flags="1">
467
+ <Matrix valuen="9" value0="1" value1="0" value2="0" value3="0" value4="1" value5="0" value6="0.29999999999999999" value7="0.69999999999999996" value8="0" width="3" height="3" scale="1" offset="0" filename="" display="1"/>
468
+ <Subcolumn vislevel="0"/>
469
+ <iText/>
470
+ </Rhs>
471
+ </Row>
472
+ </Subcolumn>
473
+ <iText formula="Colour_adjust_item.Recombination_item.action B4"/>
474
+ </Rhs>
475
+ </Row>
476
+ <Row popup="false" name="B6">
477
+ <Rhs vislevel="2" flags="5">
478
+ <iImage image_left="0" image_top="0" image_mag="0" show_status="false" show_paintbox="false" show_convert="false" show_rulers="false" scale="0" offset="0" falsecolour="false" type="true"/>
479
+ <Subcolumn vislevel="0"/>
480
+ <iText formula="recomb RGBbrad2XYZ B5"/>
481
+ </Rhs>
482
+ </Row>
483
+ <Row popup="false" name="B7">
484
+ <Rhs vislevel="3" flags="7">
485
+ <iImage image_left="0" image_top="0" image_mag="0" show_status="false" show_paintbox="false" show_convert="false" show_rulers="false" scale="0" offset="0" falsecolour="false" type="true"/>
486
+ <Subcolumn vislevel="1"/>
487
+ <iText formula="Colour_convert_item.Lab_item.action B6"/>
488
+ </Rhs>
489
+ </Row>
490
+ </Subcolumn>
491
+ </Column>
492
+ <Column x="576" y="0" open="true" selected="false" sform="false" next="6" name="C" caption="find error, add back to original">
493
+ <Subcolumn vislevel="3">
494
+ <Row popup="false" name="C1">
495
+ <Rhs vislevel="2" flags="5">
496
+ <iImage image_left="0" image_top="0" image_mag="0" show_status="false" show_paintbox="false" show_convert="false" show_rulers="false" scale="0" offset="0" falsecolour="false" type="true"/>
497
+ <Subcolumn vislevel="0"/>
498
+ <iText formula="B2"/>
499
+ </Rhs>
500
+ </Row>
501
+ <Row popup="false" name="C2">
502
+ <Rhs vislevel="2" flags="5">
503
+ <iImage image_left="0" image_top="0" image_mag="0" show_status="false" show_paintbox="false" show_convert="false" show_rulers="false" scale="0" offset="0" falsecolour="false" type="true"/>
504
+ <Subcolumn vislevel="0"/>
505
+ <iText formula="B7"/>
506
+ </Rhs>
507
+ </Row>
508
+ <Row popup="false" name="C3">
509
+ <Rhs vislevel="2" flags="5">
510
+ <iImage window_x="0" window_y="29" window_width="477" window_height="333" image_left="221" image_top="101" image_mag="1" show_status="true" show_paintbox="false" show_convert="true" show_rulers="true" scale="20" offset="0" falsecolour="false" type="true"/>
511
+ <Subcolumn vislevel="0"/>
512
+ <iText formula="C2 - C1"/>
513
+ </Rhs>
514
+ </Row>
515
+ <Row popup="false" name="C4">
516
+ <Rhs vislevel="3" flags="7">
517
+ <iImage window_x="0" window_y="29" window_width="477" window_height="333" image_left="221" image_top="101" image_mag="1" show_status="true" show_paintbox="false" show_convert="true" show_rulers="true" scale="20" offset="0" falsecolour="false" type="true"/>
518
+ <Subcolumn vislevel="1">
519
+ <Row name="x">
520
+ <Rhs vislevel="0" flags="4">
521
+ <iText/>
522
+ </Rhs>
523
+ </Row>
524
+ <Row name="super">
525
+ <Rhs vislevel="0" flags="4">
526
+ <iImage image_left="0" image_top="0" image_mag="0" show_status="false" show_paintbox="false" show_convert="false" show_rulers="false" scale="0" offset="0" falsecolour="false" type="true"/>
527
+ <Subcolumn vislevel="0"/>
528
+ <iText/>
529
+ </Rhs>
530
+ </Row>
531
+ <Row name="matrix">
532
+ <Rhs vislevel="1" flags="1">
533
+ <Matrix valuen="9" value0="1" value1="0" value2="0.5" value3="0" value4="0" value5="1" value6="0" value7="0" value8="0" width="3" height="3" scale="1" offset="0" filename="" display="1"/>
534
+ <Subcolumn vislevel="0"/>
535
+ <iText/>
536
+ </Rhs>
537
+ </Row>
538
+ </Subcolumn>
539
+ <iText formula="Colour_adjust_item.Recombination_item.action C3"/>
540
+ </Rhs>
541
+ </Row>
542
+ <Row popup="false" name="C5">
543
+ <Rhs vislevel="2" flags="5">
544
+ <iImage image_left="0" image_top="0" image_mag="0" show_status="false" show_paintbox="false" show_convert="false" show_rulers="false" scale="0" offset="0" falsecolour="false" type="true"/>
545
+ <Subcolumn vislevel="0"/>
546
+ <iText formula="C1 + C4"/>
547
+ </Rhs>
548
+ </Row>
549
+ </Subcolumn>
550
+ </Column>
551
+ </Workspace>
552
+ </root>
553
+
554
+
555
+
Binary file
Binary file
@@ -0,0 +1,58 @@
1
+ # Daltonize Processing Samples
2
+
3
+ The following samples were produced using `daltonize.rb`
4
+
5
+ ## Ishihara
6
+
7
+ [Ishihara colour perception test](https://en.wikipedia.org/wiki/Ishihara_color_test)
8
+
9
+ ### Original
10
+ ![original](images/ishihara.png)
11
+
12
+ ### Deuteranope
13
+ ![deuteranope](images/ishihara_deuteranope.png)
14
+
15
+ ### Protanope
16
+ ![protanope](images/ishihara_protanope.png)
17
+
18
+ ### Tritanope
19
+ ![tritanope](images/ishihara_tritanope.png)
20
+
21
+ ## Colour Palette
22
+
23
+ Provided by @jcupitt
24
+
25
+ ### Original
26
+ ![original](images/macbeth.jpg)
27
+
28
+ ### Deuteranope
29
+ ![deuteranope](images/macbeth_deuteranope.jpg)
30
+
31
+ ### Protanope
32
+ ![protanope](images/macbeth_protanope.jpg)
33
+
34
+ ### Tritanope
35
+ ![tritanope](images/macbeth_tritanope.jpg)
36
+
37
+ ## Wikipedia images
38
+
39
+ The wikipedia entry for [colour blindness](https://en.wikipedia.org/wiki/Colorblindness) contains a few images that
40
+ demonstrate the 3 main colour deficiencies. Each of them were processed using `daltonize.rb` based on the defficiency.
41
+
42
+ ### Deuteranope Original
43
+ ![original](images/Colorblind4.png)
44
+
45
+ ### Deuteranope (processed)
46
+ ![deuteranope](images/Colorblind4_deuteranope.png)
47
+
48
+ ### Protanope Original
49
+ ![original](images/Colorblind3.png)
50
+
51
+ ### Protanope (processed)
52
+ ![protanope](images/Colorblind3_protanope.png)
53
+
54
+ ### Tritanope Original
55
+ ![original](images/Colorblind5.png)
56
+
57
+ ### Tritanope (processed)
58
+ ![protanope](images/Colorblind5_tritanope.png)
metadata ADDED
@@ -0,0 +1,89 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: carrierwave-daltonize
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.3
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Yoav Aner
9
+ - John Cupitt
10
+ autorequire:
11
+ bindir: bin
12
+ cert_chain: []
13
+ date: 2013-05-06 00:00:00.000000000 Z
14
+ dependencies:
15
+ - !ruby/object:Gem::Dependency
16
+ type: :runtime
17
+ name: ruby-vips
18
+ prerelease: false
19
+ requirement: !ruby/object:Gem::Requirement
20
+ requirements:
21
+ - - ! '>='
22
+ - !ruby/object:Gem::Version
23
+ version: 0.2.0
24
+ none: false
25
+ version_requirements: !ruby/object:Gem::Requirement
26
+ requirements:
27
+ - - ! '>='
28
+ - !ruby/object:Gem::Version
29
+ version: 0.2.0
30
+ none: false
31
+ description: Carrierwave VIPS Daltonize processing
32
+ email:
33
+ - yoav@gingerlime.com
34
+ executables: []
35
+ extensions: []
36
+ extra_rdoc_files: []
37
+ files:
38
+ - .gitignore
39
+ - CHANGELOG.md
40
+ - Gemfile
41
+ - LICENSE.txt
42
+ - README.md
43
+ - Rakefile
44
+ - carrierwave-daltonize.gemspec
45
+ - lib/carrierwave-daltonize.rb
46
+ - lib/carrierwave-daltonize/version.rb
47
+ - lib/daltonize.rb
48
+ - other/daltonize.ws
49
+ - other/images/Colorblind3.png
50
+ - other/images/Colorblind3_protanope.png
51
+ - other/images/Colorblind4.png
52
+ - other/images/Colorblind4_deuteranope.png
53
+ - other/images/Colorblind5.png
54
+ - other/images/Colorblind5_tritanope.png
55
+ - other/images/ishihara.png
56
+ - other/images/ishihara_deuteranope.png
57
+ - other/images/ishihara_protanope.png
58
+ - other/images/ishihara_tritanope.png
59
+ - other/images/macbeth.jpg
60
+ - other/images/macbeth_deuteranope.jpg
61
+ - other/images/macbeth_protanope.jpg
62
+ - other/images/macbeth_tritanope.jpg
63
+ - other/samples.md
64
+ homepage: ''
65
+ licenses: []
66
+ post_install_message:
67
+ rdoc_options: []
68
+ require_paths:
69
+ - lib
70
+ required_ruby_version: !ruby/object:Gem::Requirement
71
+ requirements:
72
+ - - ! '>='
73
+ - !ruby/object:Gem::Version
74
+ version: '0'
75
+ none: false
76
+ required_rubygems_version: !ruby/object:Gem::Requirement
77
+ requirements:
78
+ - - ! '>='
79
+ - !ruby/object:Gem::Version
80
+ version: '0'
81
+ none: false
82
+ requirements: []
83
+ rubyforge_project:
84
+ rubygems_version: 1.8.23
85
+ signing_key:
86
+ specification_version: 3
87
+ summary: Adds daltonize processing for converting images to help colour-blindness.
88
+ Using the ruby-vips implmentation
89
+ test_files: []