colourdistance 0.0.7 → 0.7.7
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.
- checksums.yaml +4 -4
- data/lib/colourdistance.rb +112 -94
- data/lib/colourdistance/version.rb +1 -1
- metadata +1 -3
- data/.DS_Store +0 -0
- data/lib/.DS_Store +0 -0
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: adb182233c91e02f52ae16806c72b17e91111114
|
4
|
+
data.tar.gz: 0bdbd87332e28be2b3d358b85db2f71543034570
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 0fe2ed620095cef88f5b3f9e4119634746587cb429e4e307b13b0ed0ec22a903c54e483a76f91eaef81ad240e712aefc627bdc94da055f33c1b213f24673eaa8
|
7
|
+
data.tar.gz: 80993f64f5824a579e00847890b59096deb1b852543bea57106ef469dfda110f8d33a9cbe6db16ee55fe6db9c455c52de9360f132010fb8f42e741a1613d97fa
|
data/lib/colourdistance.rb
CHANGED
@@ -9,14 +9,12 @@ module Colourdistance
|
|
9
9
|
builder.c_singleton 'VALUE ciede94(VALUE color1, VALUE color2) {
|
10
10
|
double pi = 3.1415927;
|
11
11
|
double e = 2.7182818;
|
12
|
-
double _kL = 1.0;
|
13
|
-
double _kC = 1.0;
|
14
|
-
double _kH = 1.0;
|
15
12
|
double l1;
|
16
13
|
double l2;
|
17
14
|
double a1;
|
18
15
|
double a2;
|
19
16
|
|
17
|
+
|
20
18
|
double r1 = NUM2DBL(rb_hash_aref(color1, rb_str_intern(rb_str_new2("r"))))/255.0;
|
21
19
|
double g1 = NUM2DBL(rb_hash_aref(color1, rb_str_intern(rb_str_new2("g"))))/255.0;
|
22
20
|
double b1 = NUM2DBL(rb_hash_aref(color1, rb_str_intern(rb_str_new2("b"))))/255.0;
|
@@ -25,6 +23,14 @@ module Colourdistance
|
|
25
23
|
double g2 = NUM2DBL(rb_hash_aref(color2, rb_str_intern(rb_str_new2("g"))))/255.0;
|
26
24
|
double b2 = NUM2DBL(rb_hash_aref(color2, rb_str_intern(rb_str_new2("b"))))/255.0;
|
27
25
|
|
26
|
+
r1 = ((r1 <= 0.04045) ? r1 / 12.92 : pow(((r1 + 0.055) / 1.055),2.4));
|
27
|
+
g1 = ((g1 <= 0.04045) ? g1 / 12.92 : pow(((g1 + 0.055) / 1.055),2.4));
|
28
|
+
b1 = ((b1 <= 0.04045) ? b1 / 12.92 : pow(((b1 + 0.055) / 1.055),2.4));
|
29
|
+
|
30
|
+
r2 = ((r2 <= 0.04045) ? r2 / 12.92 : pow(((r2 + 0.055) / 1.055),2.4));
|
31
|
+
g2 = ((g2 <= 0.04045) ? g2 / 12.92 : pow(((g2 + 0.055) / 1.055),2.4));
|
32
|
+
b2 = ((b2 <= 0.04045) ? b2 / 12.92 : pow(((b2 + 0.055) / 1.055),2.4));
|
33
|
+
|
28
34
|
double x1 = 0.412453 * r1 + 0.357580 * g1 + 0.180423 * b1;
|
29
35
|
double y1 = 0.212671 * r1 + 0.715160 * g1 + 0.072169 * b1;
|
30
36
|
double z1 = 0.019334 * r1 + 0.119193 * g1 + 0.950227 * b1;
|
@@ -33,58 +39,57 @@ module Colourdistance
|
|
33
39
|
double y2 = 0.212671 * r2 + 0.715160 * g2 + 0.072169 * b2;
|
34
40
|
double z2 = 0.019334 * r2 + 0.119193 * g2 + 0.950227 * b2;
|
35
41
|
|
42
|
+
double fx;
|
43
|
+
double fy;
|
44
|
+
double fz;
|
45
|
+
|
46
|
+
if(x1 <= 0.008856){
|
47
|
+
fx = 7.787 * x1/0.95047 + 16.0/116.0;
|
48
|
+
}else{
|
49
|
+
fx = cbrt(x1/0.95047);
|
50
|
+
}
|
51
|
+
|
36
52
|
if(y1 <= 0.008856){
|
37
53
|
l1 = 903.3 * y1;
|
38
|
-
|
39
|
-
a1 = 500.0 * ((7.787 * x1 + 16.0/116.0) - (7.787 * y1 + 16.0/116.0));
|
40
|
-
}else{
|
41
|
-
a1 = 500.0 * (cbrt(x1) - (7.787 * y1 + 16.0/116.0));
|
42
|
-
}
|
43
|
-
if(z1 <= 0.008856){
|
44
|
-
b1 = 200 * ((7.787 * y1 + 16.0/116.0) - (7.787 * z1 + 16.0/116.0));
|
45
|
-
}else{
|
46
|
-
b1 = 200 * ((7.787 * y1 + 16.0/116.0) - cbrt(z1));
|
47
|
-
}
|
54
|
+
fy = (7.787 * y1 + 16.0/116.0);
|
48
55
|
}else{
|
49
56
|
l1 = 116.0 * cbrt(y1) - 16.0;
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
57
|
+
fy = cbrt(y1);
|
58
|
+
}
|
59
|
+
|
60
|
+
if(z1 <= 0.008856){
|
61
|
+
fz = 7.787 * z1/1.08883 + 16.0/116.0;
|
62
|
+
}else{
|
63
|
+
fz = cbrt(z1/1.08883);
|
64
|
+
}
|
65
|
+
|
66
|
+
a1 = 500.0 * (fx-fy);
|
67
|
+
b1 = 200.0 * (fy-fz);
|
68
|
+
|
69
|
+
|
70
|
+
if(x2 <= 0.008856){
|
71
|
+
fx = (7.787 * x2/0.95047 + 16.0/116.0);
|
72
|
+
}else{
|
73
|
+
fx = cbrt(x2/0.95047);
|
60
74
|
}
|
61
75
|
|
62
76
|
if(y2 <= 0.008856){
|
63
77
|
l2 = 903.3 * y2;
|
64
|
-
|
65
|
-
a2 = 500 * ((7.787 * x2 + 16.0/116.0) - (7.787 * y2 + 16.0/116.0));
|
66
|
-
}else{
|
67
|
-
a2 = 500.0 * (cbrt(x2) - (7.787 * y2 + 16.0/116.0));
|
68
|
-
}
|
69
|
-
if(z2 <= 0.008856){
|
70
|
-
b2 = 200 * ((7.787 * y2 + 16.0/116.0) - (7.787 * z2 + 16.0/116.0));
|
71
|
-
}else{
|
72
|
-
b2 = 200 * ((7.787 * y2 + 16.0/116.0) - cbrt(z2));
|
73
|
-
}
|
78
|
+
fy = (7.787 * y2 + 16.0/116.0);
|
74
79
|
}else{
|
75
80
|
l2 = 116.0 * cbrt(y2) - 16.0;
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
}else{
|
84
|
-
b2 = 200 * (cbrt(y2) - cbrt(z2));
|
85
|
-
}
|
81
|
+
fy = cbrt(y2);
|
82
|
+
}
|
83
|
+
|
84
|
+
if(z2 <= 0.008856){
|
85
|
+
fz = (7.787 * z2/1.08883 + 16.0/116.0);
|
86
|
+
}else{
|
87
|
+
fz = cbrt(z2/1.08883);
|
86
88
|
}
|
87
89
|
|
90
|
+
a2 = 500.0 * (fx-fy);
|
91
|
+
b2 = 200.0 * (fy-fz);
|
92
|
+
|
88
93
|
double kl = 2.0;
|
89
94
|
double k1 = 0.048;
|
90
95
|
double k2 = 0.014;
|
@@ -108,9 +113,6 @@ module Colourdistance
|
|
108
113
|
builder.c_singleton 'VALUE ciede2000(VALUE color1, VALUE color2) {
|
109
114
|
double pi = 3.1415927;
|
110
115
|
double e = 2.7182818;
|
111
|
-
double _kL = 1.0;
|
112
|
-
double _kC = 1.0;
|
113
|
-
double _kH = 1.0;
|
114
116
|
double l1;
|
115
117
|
double l2;
|
116
118
|
double a1;
|
@@ -124,6 +126,14 @@ module Colourdistance
|
|
124
126
|
double g2 = NUM2DBL(rb_hash_aref(color2, rb_str_intern(rb_str_new2("g"))))/255.0;
|
125
127
|
double b2 = NUM2DBL(rb_hash_aref(color2, rb_str_intern(rb_str_new2("b"))))/255.0;
|
126
128
|
|
129
|
+
r1 = ((r1 <= 0.04045) ? r1 / 12.92 : pow(((r1 + 0.055) / 1.055),2.4));
|
130
|
+
g1 = ((g1 <= 0.04045) ? g1 / 12.92 : pow(((g1 + 0.055) / 1.055),2.4));
|
131
|
+
b1 = ((b1 <= 0.04045) ? b1 / 12.92 : pow(((b1 + 0.055) / 1.055),2.4));
|
132
|
+
|
133
|
+
r2 = ((r2 <= 0.04045) ? r2 / 12.92 : pow(((r2 + 0.055) / 1.055),2.4));
|
134
|
+
g2 = ((g2 <= 0.04045) ? g2 / 12.92 : pow(((g2 + 0.055) / 1.055),2.4));
|
135
|
+
b2 = ((b2 <= 0.04045) ? b2 / 12.92 : pow(((b2 + 0.055) / 1.055),2.4));
|
136
|
+
|
127
137
|
double x1 = 0.412453 * r1 + 0.357580 * g1 + 0.180423 * b1;
|
128
138
|
double y1 = 0.212671 * r1 + 0.715160 * g1 + 0.072169 * b1;
|
129
139
|
double z1 = 0.019334 * r1 + 0.119193 * g1 + 0.950227 * b1;
|
@@ -132,58 +142,58 @@ module Colourdistance
|
|
132
142
|
double y2 = 0.212671 * r2 + 0.715160 * g2 + 0.072169 * b2;
|
133
143
|
double z2 = 0.019334 * r2 + 0.119193 * g2 + 0.950227 * b2;
|
134
144
|
|
145
|
+
double fx;
|
146
|
+
double fy;
|
147
|
+
double fz;
|
148
|
+
|
149
|
+
if(x1 <= 0.008856){
|
150
|
+
fx = 7.787 * x1/0.95047 + 16.0/116.0;
|
151
|
+
}else{
|
152
|
+
fx = cbrt(x1/0.95047);
|
153
|
+
}
|
154
|
+
|
135
155
|
if(y1 <= 0.008856){
|
136
156
|
l1 = 903.3 * y1;
|
137
|
-
|
138
|
-
a1 = 500.0 * ((7.787 * x1 + 16.0/116.0) - (7.787 * y1 + 16.0/116.0));
|
139
|
-
}else{
|
140
|
-
a1 = 500.0 * (cbrt(x1) - (7.787 * y1 + 16.0/116.0));
|
141
|
-
}
|
142
|
-
if(z1 <= 0.008856){
|
143
|
-
b1 = 200 * ((7.787 * y1 + 16.0/116.0) - (7.787 * z1 + 16.0/116.0));
|
144
|
-
}else{
|
145
|
-
b1 = 200 * ((7.787 * y1 + 16.0/116.0) - cbrt(z1));
|
146
|
-
}
|
157
|
+
fy = (7.787 * y1 + 16.0/116.0);
|
147
158
|
}else{
|
148
159
|
l1 = 116.0 * cbrt(y1) - 16.0;
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
-
|
154
|
-
|
155
|
-
|
156
|
-
|
157
|
-
|
158
|
-
|
160
|
+
fy = cbrt(y1);
|
161
|
+
}
|
162
|
+
|
163
|
+
if(z1 <= 0.008856){
|
164
|
+
fz = 7.787 * z1/1.08883 + 16.0/116.0;
|
165
|
+
}else{
|
166
|
+
fz = cbrt(z1/1.08883);
|
167
|
+
}
|
168
|
+
|
169
|
+
a1 = 500.0 * (fx-fy);
|
170
|
+
b1 = 200.0 * (fy-fz);
|
171
|
+
|
172
|
+
|
173
|
+
if(x2 <= 0.008856){
|
174
|
+
fx = (7.787 * x2/0.95047 + 16.0/116.0);
|
175
|
+
}else{
|
176
|
+
fx = cbrt(x2/0.95047);
|
159
177
|
}
|
160
178
|
|
161
179
|
if(y2 <= 0.008856){
|
162
180
|
l2 = 903.3 * y2;
|
163
|
-
|
164
|
-
a2 = 500 * ((7.787 * x2 + 16.0/116.0) - (7.787 * y2 + 16.0/116.0));
|
165
|
-
}else{
|
166
|
-
a2 = 500.0 * (cbrt(x2) - (7.787 * y2 + 16.0/116.0));
|
167
|
-
}
|
168
|
-
if(z2 <= 0.008856){
|
169
|
-
b2 = 200 * ((7.787 * y2 + 16.0/116.0) - (7.787 * z2 + 16.0/116.0));
|
170
|
-
}else{
|
171
|
-
b2 = 200 * ((7.787 * y2 + 16.0/116.0) - cbrt(z2));
|
172
|
-
}
|
181
|
+
fy = (7.787 * y2 + 16.0/116.0);
|
173
182
|
}else{
|
174
183
|
l2 = 116.0 * cbrt(y2) - 16.0;
|
175
|
-
|
176
|
-
a2 = 500 * ((7.787 * x2 + 16.0/116.0) - cbrt(y2));
|
177
|
-
}else{
|
178
|
-
a2 = 500.0 * (cbrt(x2) - cbrt(y2));
|
179
|
-
}
|
180
|
-
if(z2 <= 0.008856){
|
181
|
-
b2 = 200 * (cbrt(y2) - (7.787 * z2 + 16.0/116.0));
|
182
|
-
}else{
|
183
|
-
b2 = 200 * (cbrt(y2) - cbrt(z2));
|
184
|
-
}
|
184
|
+
fy = cbrt(y2);
|
185
185
|
}
|
186
186
|
|
187
|
+
if(z2 <= 0.008856){
|
188
|
+
fz = (7.787 * z2/1.08883 + 16.0/116.0);
|
189
|
+
}else{
|
190
|
+
fz = cbrt(z2/1.08883);
|
191
|
+
}
|
192
|
+
|
193
|
+
a2 = 500.0 * (fx-fy);
|
194
|
+
b2 = 200.0 * (fy-fz);
|
195
|
+
|
196
|
+
|
187
197
|
double c1 = sqrt(a1*a1+b1*b1);
|
188
198
|
double c2 = sqrt(a2*a2+b2*b2);
|
189
199
|
double cdelta = c2 - c1;
|
@@ -199,7 +209,7 @@ module Colourdistance
|
|
199
209
|
|
200
210
|
double c1prime = sqrt(a1prime*a1prime+b1*b1);
|
201
211
|
double c2prime = sqrt(a2prime*a2prime+b2*b2);
|
202
|
-
double cprime = (c1prime +
|
212
|
+
double cprime = (c1prime + c2prime)/2.0;
|
203
213
|
double cprimeadj = sqrt(pow(cprime,7)/(pow(cprime,7)+6103515625.0));
|
204
214
|
double cprimedelta = c2prime - c1prime;
|
205
215
|
|
@@ -208,13 +218,14 @@ module Colourdistance
|
|
208
218
|
if(c1 == 0.0){
|
209
219
|
h1 = 0.0;
|
210
220
|
}else{
|
211
|
-
h1 = fmod(atan2(b1,a1prime),360.0);
|
221
|
+
h1 = fmod(atan2(b1,a1prime)*180.0/pi,360.0);
|
212
222
|
}
|
213
|
-
if(
|
223
|
+
if(c2 == 0.0){
|
214
224
|
h2 = 0.0;
|
215
225
|
}else{
|
216
|
-
h2 = fmod(atan2(b2,a2prime),360.0);
|
226
|
+
h2 = fmod(atan2(b2,a2prime)*180.0/pi,360.0);
|
217
227
|
}
|
228
|
+
|
218
229
|
double h;
|
219
230
|
if (fabs(h2 - h1) <= 180.0){
|
220
231
|
h = h2 - h1;
|
@@ -229,8 +240,14 @@ module Colourdistance
|
|
229
240
|
if (fabs(h1 - h2) > 180.0){
|
230
241
|
hprime += 180.0;
|
231
242
|
}
|
243
|
+
if(c1prime == 0.0 || c2prime == 0.0){
|
244
|
+
hprime *= 2.0;
|
245
|
+
}
|
232
246
|
|
233
|
-
double t = 1.0 - 0.17*cos(hprime-30.0) +
|
247
|
+
double t = 1.0 - 0.17*cos(hprime-30.0) +
|
248
|
+
0.24*cos(2.0*hprime) +
|
249
|
+
0.32*cos(3.0*hprime + 6.0) -
|
250
|
+
0.20*cos(4.0*hprime-63.0);
|
234
251
|
|
235
252
|
double sl = 1.0 + 0.015 * lbaradj/sqrt(20+lbaradj);
|
236
253
|
double sc = 1.0 + 0.045*cprime;
|
@@ -239,11 +256,12 @@ module Colourdistance
|
|
239
256
|
double rt = -2.0*cprimeadj*sin(60.0*pow(e,(hdelta-275.0)*(hdelta-275.0)/(-625.0)));
|
240
257
|
|
241
258
|
double ldiff = (l1 - l2)/(sl);
|
242
|
-
double adiff =
|
259
|
+
double adiff = cprimedelta/sc;
|
243
260
|
double bdiff = hdelta/sh;
|
244
|
-
double rdiff = rt*
|
261
|
+
double rdiff = rt*adiff*bdiff;
|
262
|
+
double val = sqrt(ldiff*ldiff+adiff*adiff+bdiff*bdiff+rdiff)/100.0;
|
245
263
|
|
246
|
-
return DBL2NUM(
|
264
|
+
return DBL2NUM(val);
|
247
265
|
}'
|
248
266
|
end
|
249
267
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: colourdistance
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.7.7
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Orange Seven
|
@@ -76,7 +76,6 @@ executables: []
|
|
76
76
|
extensions: []
|
77
77
|
extra_rdoc_files: []
|
78
78
|
files:
|
79
|
-
- .DS_Store
|
80
79
|
- .gitignore
|
81
80
|
- .travis.yml
|
82
81
|
- Gemfile
|
@@ -86,7 +85,6 @@ files:
|
|
86
85
|
- bin/console
|
87
86
|
- bin/setup
|
88
87
|
- colourdistance.gemspec
|
89
|
-
- lib/.DS_Store
|
90
88
|
- lib/colourdistance.rb
|
91
89
|
- lib/colourdistance/version.rb
|
92
90
|
homepage:
|
data/.DS_Store
DELETED
Binary file
|
data/lib/.DS_Store
DELETED
Binary file
|