如何使用 Apache Batik SVG 1.8 将形状渲染属性设置为 crispEdges
How to set the shape rendering attribute to crispEdges using Apache Batik SVG 1.8
我正在尝试让 Apache Batik 1.8 输出
shape-rendering="crispEdges"
而不是默认值
shape-rendering="auto"
在根 <svg />
节点中。
我发现了 SVGConstants.SVG_SHAPE_RENDERING_ATTRIBUTE
and 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);
但是 none 在输出 SVG 文件中将 render-style
属性更改为 'crispEdges'。
(我目前正在研究 Document
,希望我可以通过 XML/strings 手动更改属性。我也发现了 a few related classes in the source code,但我不能貌似现货不错example/test)
将 render-style
更改为 crispEdges
最优雅的方法是什么?
我目前找到的解决方法是:
Element tlg = svgGraphics.getTopLevelGroup();
tlg.setAttribute("shape-rendering","crispEdges");
svgGraphics.setTopLevelGroup(tlg);
图形现在呈现清晰,但是,如代码所示,该属性作为样式应用于顶级 <g/>
元素。
我期待看到更简洁的实现。
我能够通过 Graphics2D
界面使它正常工作。根据 Batik code,以下 Graphics2D
代码将 shape-rendering="crispEdges"
添加到 SVG:
g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_OFF);
我正在尝试让 Apache Batik 1.8 输出
shape-rendering="crispEdges"
而不是默认值
shape-rendering="auto"
在根 <svg />
节点中。
我发现了 SVGConstants.SVG_SHAPE_RENDERING_ATTRIBUTE
and 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);
但是 none 在输出 SVG 文件中将 render-style
属性更改为 'crispEdges'。
(我目前正在研究 Document
,希望我可以通过 XML/strings 手动更改属性。我也发现了 a few related classes in the source code,但我不能貌似现货不错example/test)
将 render-style
更改为 crispEdges
最优雅的方法是什么?
我目前找到的解决方法是:
Element tlg = svgGraphics.getTopLevelGroup();
tlg.setAttribute("shape-rendering","crispEdges");
svgGraphics.setTopLevelGroup(tlg);
图形现在呈现清晰,但是,如代码所示,该属性作为样式应用于顶级 <g/>
元素。
我期待看到更简洁的实现。
我能够通过 Graphics2D
界面使它正常工作。根据 Batik code,以下 Graphics2D
代码将 shape-rendering="crispEdges"
添加到 SVG:
g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_OFF);