Open m13253 opened 2 years ago
This is a very technical issue, and needs to be addressed. Changes have been made to color picker since this issue was opened. Can you confirm this issue is still relevant in v0.73? /needinfo
I believe it is still relevant. Naïve CMYK values are not used in any graphical application, thus not useful.
I would recommend either (1) including a color management framework or call the operating system’s provided API to do the conversion using an ICC file, (2) just remove the CMYK values to prevent misleading people.
Description of the new feature / enhancement
Currently, ColorPicker uses Naive CMYK conversion function to convert sRGB to CMYK.
This conversion function was coincidentally also defined in CSS Color Model Level 4 (old draft version 2021-06-01), [1] but Naive CMYK was removed in the latest draft version 2021-12-15 [2], probably due to being useless.
As far as I know, no other popular software uses this conversion function.
Why Naive CMYK is not useful (also not accurate)?
Which CMYK color spaces are useful?
In practical, a graphics designer who needs to use CMYK will need to deal with two CMYK color spaces:
Therefore, the solution is to target one (or multiple) standardized working color space.
What is the solution?
Unfortunately, there is no analytical formula to do the conversion, due to the reason I described. The fastest way is to use a Look-up Table (LUT).
There are 4 options, choose either one of below:
Scenario when this would be used?
The (only) scenario that (I can think of) is:
Therefore, it is important that the CMYK value produced by ColorPicker is in a standarized “working color space”, as introduced in above section.
There is no reason that a user would ever need Naive CMYK.
Supporting information
References
Test colors
ICC profile used: Adobe ICC profile bundle, macOS ColorSync built-in profiles. Rendering intent: relative colorimetric. Black point compensation: enable.
There might be less than 1% round-off error in my provided data. Although CSS Color Model Level 4 draft proposes using
ceil()
, Affinity Designer, LittleCMS2, as well as my values here useround()
.