carrierwave-daltonize 0.0.3

Sign up to get free protection for your applications and to get access to all the features.
@@ -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: []