diff options
| author | frozolotl <44589151+frozolotl@users.noreply.github.com> | 2023-11-17 10:41:45 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2023-11-17 10:41:45 +0100 |
| commit | b0e81d4b3fd2bd525955f1d95145cf62d64ac096 (patch) | |
| tree | a67211d85ddc0920fe11e64ac25cc440974038ed /crates/typst-pdf/src/postscript | |
| parent | f6215cfdafdbbb63f85abeaf5e8948d8ab5717f3 (diff) | |
Remove restrictions to chroma and improve clamping (#2690)
This PR does a few small things:
- Oklab's a*/b* and Oklch's chroma components can be as large as desired.
- In PDF, when encoding Oklab, the range is widened from [-0.4,0.4] to [-0.5,0.5].
- In PDF, clamping is now performed on Oklch's chroma instead of a* and b*.
This causes hue not to be distorted when clamping.
SVG and PNG export remain unchanged:
- SVG itself never had any restrictions on chroma.
We directly use the `oklab` and `oklch` CSS colors, which should work fine for the most part.
In the future, embedded ICC profiles might be nice. Further research is likely necessary.
- While PNG does not support color spaces like Oklab or Oklch, certain useful features exist.
One can define gamma (gAMA) and chromacities&whitepoint (cHRM) chunks and even embed ICC profiles.
While `image` crate does not support these features for encoding, its backend crate `png` does support gAMA and cHRM.
It does not allow embedding ICC profiles yet, though.
As it stands, to fully support wide gamuts and more accurate colors, more work is necessary.
This PR should help a bit though.
Diffstat (limited to 'crates/typst-pdf/src/postscript')
| -rw-r--r-- | crates/typst-pdf/src/postscript/oklab.ps | 8 |
1 files changed, 4 insertions, 4 deletions
diff --git a/crates/typst-pdf/src/postscript/oklab.ps b/crates/typst-pdf/src/postscript/oklab.ps index 4d6e9ad5..e766bbd8 100644 --- a/crates/typst-pdf/src/postscript/oklab.ps +++ b/crates/typst-pdf/src/postscript/oklab.ps @@ -3,12 +3,12 @@ % /!\ WARNING: The A and B components **MUST** be encoded % in the range [0, 1] before calling this function. % This is because the function assumes that the - % A and B components are offset by a factor of 0.4 + % A and B components are offset by a factor of 0.5 % in order to meet the range requirements of the % PDF specification. - exch 0.4 sub - exch 0.4 sub + exch 0.5 sub + exch 0.5 sub % Load L a and b into the stack 2 index @@ -75,4 +75,4 @@ % Discard f1, f2, and f3 by rolling the stack and popping 6 3 roll pop pop pop -}
\ No newline at end of file +} |
