Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Jzazbz color space #51

Open
imkremen opened this issue Sep 24, 2018 · 9 comments
Open

Jzazbz color space #51

imkremen opened this issue Sep 24, 2018 · 9 comments
Labels
enhancement New feature or request

Comments

@imkremen
Copy link

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?

@mbostock
Copy link
Member

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

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

@danburzo
Copy link
Contributor

danburzo commented Sep 9, 2020

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.

@DCtheTall
Copy link

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

@danburzo
Copy link
Contributor

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

@DCtheTall
Copy link

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

@DCtheTall
Copy link

DCtheTall commented Oct 31, 2020

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.

@danburzo
Copy link
Contributor

danburzo commented Nov 1, 2020

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.

@DCtheTall
Copy link

@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
Copy link

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

@mbostock mbostock added the enhancement New feature or request label Mar 28, 2022
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request
Development

No branches or pull requests

4 participants