Exit
  • Global community
    • Language:
      • Deutsch
      • English
      • Español
      • Français
      • Português
  • 日本語コミュニティ
  • 한국 커뮤니티
0

Converting a delta E 2000 Javascript library to work in ExtendScript?

Participant ,
Feb 16, 2020 Feb 16, 2020

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

TOPICS
Scripting
640
Translate
Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Participant ,
Feb 17, 2020 Feb 17, 2020
LATEST

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);
}
Translate
Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines