我正在尝试将Apache Batik 1.8输出
shape-rendering="crispEdges"
而不是缺省的
shape-rendering="auto"
在根<svg />
节点中。
我发现了SVGConstants.SVG_SHAPE_RENDERING_ATTRIBUTE
和SVGConstants#SVG_CRISP_EDGES_VALUE
,但我不确定如何将这些属性设置为SVGGraphics2D
实例。
我尝试过类似于起诉SVGGraphics2D(名为SVGGraphics2D
)的方法:
//svgGraphics.setRenderingHint(SVGRenderingHints.SVG_SHAPE_RENDERING_ATTRIBUTE,
// SVGRenderingHints.SVG_CRISP_EDGES_VALUE);
然而,这是java.awt.RenderingHints
SVGGraphics2D.setRenderingHints所期望的。
我也尝试过:
svgGraphics.setRenderingHint(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY);
svgGraphics.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
svgGraphics.setRenderingHint(RenderingHints.KEY_ALPHA_INTERPOLATION, RenderingHints.VALUE_ALPHA_INTERPOLATION_QUALITY);
svgGraphics.setRenderingHint(RenderingHints.KEY_COLOR_RENDERING, RenderingHints.VALUE_COLOR_RENDER_QUALITY);
但是,上述操作都不会将输出SVG文件中的render-style
属性更改为“crispEdges”。
(我目前正在研究Document
,希望我可以通过XML/string手动更改属性。我也发现了a few related classes in the source code,但我似乎找不到一个好的示例/测试)
将render-style
更改为crispEdges
最优雅的方式是什么?
发布于 2021-10-29 01:13:23
我现在找到的解决方法是:
Element tlg = svgGraphics.getTopLevelGroup();
tlg.setAttribute("shape-rendering","crispEdges");
svgGraphics.setTopLevelGroup(tlg);
尽管如代码所示,该属性作为样式应用于顶级<g/>
元素,但图形现在呈现得很清晰。
我期待着看到更干净的实现。
https://stackoverflow.com/questions/69762464
复制相似问题