Copy link to clipboard
Copied
Greetings,
The following library :https://github.com/zschuessler/DeltaE is a wonderful tool that I would like to use in my swatchbook generator Let it Shine! however my limited Javascript knowledge has cost me far too many hours trying to get this to work.
Could someone provide some guidance?
I'd want to adapt my swatchbook generator to provide a user-provided delta E 2000 difference between swatches and also create a honeycomb-like pattern that extends a central given swatch with radiating swatches that have a user-provided de2000 towards each cmyk direction (think color wheel).
Thank you very much!!!
Antoine
Copy link to clipboard
Copied
Hope it helps someone!
function DeltaE2000()
{
var kL = 1.0;
var kC = 1.0;
var kH = 1.0;
var lBarPrime = 0.5 * (Lab1.L + Lab2.L);
var c1 = Math.sqrt(Lab1.a * Lab1.a + Lab1.b * Lab1.b);
var c2 = Math.sqrt(Lab2.a * Lab2.a + Lab2.b * Lab2.b);
var cBar = 0.5 * (c1 + c2);
var cBar7 = cBar * cBar * cBar * cBar * cBar * cBar * cBar;
var g = 0.5 * (1.0 - Math.sqrt(cBar7 / (cBar7 + 6103515625.0))); /* 6103515625 = 25^7 */
var a1Prime = Lab1.a * (1.0 + g);
var a2Prime = Lab2.a * (1.0 + g);
var c1Prime = Math.sqrt(a1Prime * a1Prime + Lab1.b * Lab1.b);
var c2Prime = Math.sqrt(a2Prime * a2Prime + Lab2.b * Lab2.b);
var cBarPrime = 0.5 * (c1Prime + c2Prime);
var h1Prime = (Math.atan2(Lab1.b, a1Prime) * 180.0) / Math.PI;
if (h1Prime < 0.0)
h1Prime += 360.0;
var h2Prime = (Math.atan2(Lab2.b, a2Prime) * 180.0) / Math.PI;
if (h2Prime < 0.0)
h2Prime += 360.0;
var hBarPrime = (Math.abs(h1Prime - h2Prime) > 180.0) ? (0.5 * (h1Prime + h2Prime + 360.0)) : (0.5 * (h1Prime + h2Prime));
var t = 1.0 -
0.17 * Math.cos(Math.PI * ( hBarPrime - 30.0) / 180.0) +
0.24 * Math.cos(Math.PI * (2.0 * hBarPrime ) / 180.0) +
0.32 * Math.cos(Math.PI * (3.0 * hBarPrime + 6.0) / 180.0) -
0.20 * Math.cos(Math.PI * (4.0 * hBarPrime - 63.0) / 180.0);
if (Math.abs(h2Prime - h1Prime) <= 180.0)
dhPrime = h2Prime - h1Prime;
else
dhPrime = (h2Prime <= h1Prime) ? (h2Prime - h1Prime + 360.0) : (h2Prime - h1Prime - 360.0);
var dLPrime = Lab2.L - Lab1.L;
var dCPrime = c2Prime - c1Prime;
var dHPrime = 2.0 * Math.sqrt(c1Prime * c2Prime) * Math.sin(Math.PI * (0.5 * dhPrime) / 180.0);
var sL = 1.0 + ((0.015 * (lBarPrime - 50.0) * (lBarPrime - 50.0)) / Math.sqrt(20.0 + (lBarPrime - 50.0) * (lBarPrime - 50.0)));
var sC = 1.0 + 0.045 * cBarPrime;
var sH = 1.0 + 0.015 * cBarPrime * t;
var dTheta = 30.0 * Math.exp(-((hBarPrime - 275.0) / 25.0) * ((hBarPrime - 275.0) / 25.0));
var cBarPrime7 = cBarPrime * cBarPrime * cBarPrime * cBarPrime * cBarPrime * cBarPrime * cBarPrime;
var rC = Math.sqrt(cBarPrime7 / (cBarPrime7 + 6103515625.0));
var rT = -2.0 * rC * Math.sin(Math.PI * (2.0 * dTheta) / 180.0);
DE2000 = Math.sqrt(
(dLPrime / (kL * sL)) * (dLPrime / (kL * sL)) +
(dCPrime / (kC * sC)) * (dCPrime / (kC * sC)) +
(dHPrime / (kH * sH)) * (dHPrime / (kH * sH)) +
(dCPrime / (kC * sC)) * (dHPrime / (kH * sH)) * rT);
}
Get ready! An upgraded Adobe Community experience is coming in January.
Learn more