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