d3-color icon indicating copy to clipboard operation
d3-color copied to clipboard

Jzazbz color space

Open imkremen opened this issue 6 years ago • 9 comments

Some new color space: https://www.osapublishing.org/oe/fulltext.cfm?uri=oe-25-13-15131&id=368272 Here python implementation https://github.com/nschloe/colorio

Maybe d3 can support it?

imkremen avatar Sep 24 '18 17:09 imkremen

Yes, that’s a good idea. There’s a nice implementation here by Jacob Rus:

https://observablehq.com/@jrus/jzazbz

mbostock avatar Aug 22 '19 23:08 mbostock

I could make a PR to add support for Jz​az​bz.

One thing that nags me is that the color space operates CIE XYZ absolute values, and I'm not sure how to scale relative XYZ values to meet the authors' intentions and make the best use of Jzazbz (or whether the decision alters the qualities of this color space in significant ways). @jrus uses 200 cd/m2 in his notebook.

danburzo avatar Sep 09 '20 17:09 danburzo

@danburzo are you still working on this? If not, would you mind if I attempted a PR?

DCtheTall avatar Oct 20 '20 15:10 DCtheTall

@DCtheTall not at all! I have not had the chance to put together the PR, so I'm happy to pass the baton. I have an initial implementation here, if it helps in any way.

danburzo avatar Oct 20 '20 17:10 danburzo

I haven't forgotten about this, just been busy at work. I plan on getting to this still 😅

DCtheTall avatar Oct 28 '20 19:10 DCtheTall

Took a look at this today and I think the best approach is to start by separating the XYZ color space in src/lab.js into its own module and then use that module as a dependency to reimplement src/lab.js. It will save me having to reinvent the wheel for going to Jzazbz and use an XYZ representation that is consistent with the one already in src/lab.js.

If that sounds like the right idea, I have a draft PR up now with this issue tagged. If there's a reason not to do this (like the XYZ space in src/lab.js is not what we want to use here), then I'll defer to the owners on what a better path forward is.

DCtheTall avatar Oct 31 '20 21:10 DCtheTall

I think extracting XYZ D50 as its own color space is a useful addition to the API. However, one thing I'm not sure about, is which XYZ space should d3.xyz point to, if any. Here are the conversions needed for Lab and Jzazbz:

  • sRGB <-> XYZ (D65) <-> XYZ (D50) <-> Lab
  • sRGB <-> XYZ (D65) <-> JzAzBz

In the current implementation of d3.lab, sRGB <-> XYZ (D65) <-> XYZ (D50) is performed in a single step (using a combined matrix).

While XYZ D50 is useful for Lab/LCh and the ProPhoto RGB color space. On the other hand, XYZ D65 is useful for Jzazbz or DIN99.

danburzo avatar Nov 01 '20 10:11 danburzo

@danburzo thanks for the clarification between XYZ D65 and D50.

It seems to me that since D65 is actually used by multiple color space conversion methods, it makes sense from a software design perspective to refactor it out to make it reuseable.

As for whether to make XYZ D50 its own module, I'll defer that to the others on this thread. I think it probably does make sense to have it be its own module as well.

DCtheTall avatar Nov 02 '20 16:11 DCtheTall

@danburzo after thinking on this some, I think it makes sense to have both XYZ spaces as their own module.

As for the name, I was thinking there should be d3.xyzd50 and d3.xyzd65, or possibly just d3.d50 and d3.d65. I think having one be called d3.xyz might be confusing to users?

DCtheTall avatar Nov 08 '20 19:11 DCtheTall