Mike Hearn created BATIK-1323:
---------------------------------
Summary: Batik should default to
shape-rendering="geometricPrecision" on clip paths
Key: BATIK-1323
URL: https://issues.apache.org/jira/browse/BATIK-1323
Project: Batik
Issue Type: Improvement
Reporter: Mike Hearn
Batik does not anti-alias clips even when anti-aliasing is on in the rendering
hints. This causes rendered outputs to look worse than competing renderers.
When I first saw this I felt sure it must be a bug, because librsvg doesn't do
this and because other parts of the rendered image _did_ have anti-aliasing.
However, after 90 minutes debugging and searching JIRA, I found that in fact
this is deliberate. Batik defaults shape-rendering to "optimizeForSpeed", not
"geometricPrecision" (SVGClipPathElementBridge:111), apparently with no global
way to override this. The decision appears to date from 2005 and has been
reported as a bug several times since.
The SVG spec apparently allows renderers to make up their own defaults here, so
Batik is not "wrong" exactly. However I was confused, because Mozilla DevDocs
says:
[https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/shape-rendering]
"This value indicates that the user agent shall make appropriate tradeoffs to
balance speed, crisp edges and geometric precision, but {*}with geometric
precision given more importance than speed and crisp edges{*}."
i.e. this implies that renderers do normally prefer quality over speed. Also I
tried shape-rendering but accidentally applied it to the clipped shape instead
of the clip itself, and then it had no impact.
I think most people won't debug this, if they notice aliasing in the output
image. They'll just assume Batik is buggy and maybe switch to another renderer.
That was my plan if I couldn't fix it within a few hours of debugging.
Fortunately, the fix is easy in my case because I control the SVG being
rendered. For other people it would be not so easy.
Suggestion: if "hints" is null in that part of the code, default to the
rendering hints of the root element or something else where AA settings are
probably configured. Don't simply default to useAA=false if the shape-rendering
property is missing.
--
This message was sent by Atlassian Jira
(v8.20.1#820001)
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]