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.
- data/.gitignore +18 -0
- data/CHANGELOG.md +20 -0
- data/Gemfile +4 -0
- data/LICENSE.txt +22 -0
- data/README.md +82 -0
- data/Rakefile +1 -0
- data/carrierwave-daltonize.gemspec +21 -0
- data/lib/carrierwave-daltonize.rb +33 -0
- data/lib/carrierwave-daltonize/version.rb +5 -0
- data/lib/daltonize.rb +139 -0
- data/other/daltonize.ws +555 -0
- data/other/images/Colorblind3.png +0 -0
- data/other/images/Colorblind3_protanope.png +0 -0
- data/other/images/Colorblind4.png +0 -0
- data/other/images/Colorblind4_deuteranope.png +0 -0
- data/other/images/Colorblind5.png +0 -0
- data/other/images/Colorblind5_tritanope.png +0 -0
- data/other/images/ishihara.png +0 -0
- data/other/images/ishihara_deuteranope.png +0 -0
- data/other/images/ishihara_protanope.png +0 -0
- data/other/images/ishihara_tritanope.png +0 -0
- data/other/images/macbeth.jpg +0 -0
- data/other/images/macbeth_deuteranope.jpg +0 -0
- data/other/images/macbeth_protanope.jpg +0 -0
- data/other/images/macbeth_tritanope.jpg +0 -0
- data/other/samples.md +58 -0
- metadata +89 -0
data/.gitignore
ADDED
data/CHANGELOG.md
ADDED
@@ -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
data/LICENSE.txt
ADDED
@@ -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.
|
data/README.md
ADDED
@@ -0,0 +1,82 @@
|
|
1
|
+
# CarrierWave::Daltonize
|
2
|
+
|
3
|
+
Adds [daltonize](http://www.daltonize.org/) processing to carrierwave (using ruby-vips).
|
4
|
+
|
5
|
+
[](/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
|
data/Rakefile
ADDED
@@ -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
|
data/lib/daltonize.rb
ADDED
@@ -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
|
data/other/daltonize.ws
ADDED
@@ -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 " 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 "$HOME/GIT/carrierwave-daltonize/other/images/macbeth.jpg""/>
|
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 " 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 " 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 " 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
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
data/other/samples.md
ADDED
@@ -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
|
+

|
11
|
+
|
12
|
+
### Deuteranope
|
13
|
+

|
14
|
+
|
15
|
+
### Protanope
|
16
|
+

|
17
|
+
|
18
|
+
### Tritanope
|
19
|
+

|
20
|
+
|
21
|
+
## Colour Palette
|
22
|
+
|
23
|
+
Provided by @jcupitt
|
24
|
+
|
25
|
+
### Original
|
26
|
+

|
27
|
+
|
28
|
+
### Deuteranope
|
29
|
+

|
30
|
+
|
31
|
+
### Protanope
|
32
|
+

|
33
|
+
|
34
|
+
### Tritanope
|
35
|
+

|
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
|
+

|
44
|
+
|
45
|
+
### Deuteranope (processed)
|
46
|
+

|
47
|
+
|
48
|
+
### Protanope Original
|
49
|
+

|
50
|
+
|
51
|
+
### Protanope (processed)
|
52
|
+

|
53
|
+
|
54
|
+
### Tritanope Original
|
55
|
+

|
56
|
+
|
57
|
+
### Tritanope (processed)
|
58
|
+

|
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: []
|