colourdistance 0.0.7 → 0.7.7

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 2f540b8bfb96e37fbfe0d67c9e3947c7e963aa97
4
- data.tar.gz: 53afb6ae398ec5f078f4cd1daaac2ae002f41a3a
3
+ metadata.gz: adb182233c91e02f52ae16806c72b17e91111114
4
+ data.tar.gz: 0bdbd87332e28be2b3d358b85db2f71543034570
5
5
  SHA512:
6
- metadata.gz: 07a6447f56413d8c43a154bee396ed247257e987e0852ee9e3df8958b2776d021b0022c26bc8419831e2aadf587db3ba0730f8caa7fee297ebefc77bb3e7fd0e
7
- data.tar.gz: 83cfb21d9961be9a6debc42a7f1f756a4074c229d854a481e3cb3bf1b2d194786057bd3c1de6f8ff5c3ee036d8cf169535936ff4d5fcf7472981cf1832307c9d
6
+ metadata.gz: 0fe2ed620095cef88f5b3f9e4119634746587cb429e4e307b13b0ed0ec22a903c54e483a76f91eaef81ad240e712aefc627bdc94da055f33c1b213f24673eaa8
7
+ data.tar.gz: 80993f64f5824a579e00847890b59096deb1b852543bea57106ef469dfda110f8d33a9cbe6db16ee55fe6db9c455c52de9360f132010fb8f42e741a1613d97fa
@@ -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
- if(x1 <= 0.008856){
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
- if(x1 <= 0.008856){
51
- a1 = 500 * ((7.787 * x1 + 16.0/116.0) - cbrt(y1));
52
- }else{
53
- a1 = 500.0 * (cbrt(x1) - cbrt(y1));
54
- }
55
- if(z1 <= 0.008856){
56
- b1 = 200 * (cbrt(y1) - (7.787 * z1 + 16.0/116.0));
57
- }else{
58
- b1 = 200 * (cbrt(y1) - cbrt(z1));
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
- if(x2 <= 0.008856){
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
- if(x2 <= 0.008856){
77
- a2 = 500 * ((7.787 * x2 + 16.0/116.0) - cbrt(y2));
78
- }else{
79
- a2 = 500.0 * (cbrt(x2) - cbrt(y2));
80
- }
81
- if(z2 <= 0.008856){
82
- b2 = 200 * (cbrt(y2) - (7.787 * z2 + 16.0/116.0));
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
- if(x1 <= 0.008856){
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
- if(x1 <= 0.008856){
150
- a1 = 500 * ((7.787 * x1 + 16.0/116.0) - cbrt(y1));
151
- }else{
152
- a1 = 500.0 * (cbrt(x1) - cbrt(y1));
153
- }
154
- if(z1 <= 0.008856){
155
- b1 = 200 * (cbrt(y1) - (7.787 * z1 + 16.0/116.0));
156
- }else{
157
- b1 = 200 * (cbrt(y1) - cbrt(z1));
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
- if(x2 <= 0.008856){
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
- if(x2 <= 0.008856){
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 + c1prime)/2.0;
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(c1 == 0.0){
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) + 0.24*cos(2.0*hprime) + 0.32*cos(3.0*hprime + 6.0) - 0.20*cos(4.0*hprime-63.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 = cdelta/sc;
259
+ double adiff = cprimedelta/sc;
243
260
  double bdiff = hdelta/sh;
244
- double rdiff = rt*(cdelta*hdelta)/(sh*sh);
261
+ double rdiff = rt*adiff*bdiff;
262
+ double val = sqrt(ldiff*ldiff+adiff*adiff+bdiff*bdiff+rdiff)/100.0;
245
263
 
246
- return DBL2NUM(sqrt(ldiff*ldiff+adiff*adiff+bdiff*bdiff+rdiff)/100.0);
264
+ return DBL2NUM(val);
247
265
  }'
248
266
  end
249
267
  end
@@ -1,3 +1,3 @@
1
1
  module Colourdistance
2
- VERSION = "0.0.7"
2
+ VERSION = "0.7.7"
3
3
  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.0.7
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