我可以使用SVG Salamander将SVG栅格化为PNG文件吗?

时间:2012-01-19 18:18:55

标签: svg png rasterize svg-salamander

我看到它导致SVG-Salamander对我的项目来说足够小。但我不知道我是否可以使用它,但不知道如何做到这一点。

我使用此代码:

public static void main(String[] args) throws IOException, SVGException {
    // TODO Auto-generated method stub

    File f = new File("./src/game_scheme.svg");
    SVGUniverse svgUniverse = new SVGUniverse();
    SVGDiagram diagram = svgUniverse.getDiagram(svgUniverse.loadSVG(f.toURL()));
    BufferedImage bi = new BufferedImage(320, 240, BufferedImage.TYPE_INT_ARGB);
    Graphics2D ig2 = bi.createGraphics();
    diagram.render(ig2);
    ImageIO.write(bi, "PNG", new File("./yourImageName.png"));

}

但图像并不流畅:(,任何想法?

2 个答案:

答案 0 :(得分:3)

是的,有可能。您需要做的就是使用SVG Salamander加载SVG文档,创建要写入的BufferedImage,从BufferedImage创建Graphics2D上下文,然后调用SVGDiagram上的render()方法绘制到您的图像。

您可以使用SVGIcon简化流程。它将为您处理所有Salamander内部,您可以将SVG文档视为普通的Swing图标。

如果您计划在命令行上将大量SVG文件转换为图像,那么还有一个Ant任务可以让您将SVG转换为ant脚本中的图像。

SVG Salamander使用文档: http://svgsalamander.java.net/docs/use.html

使用带Swing的SVG Salamander的简单演示: http://svgsalamander.java.net/docs/exampleCode/SVGIODemo.html

答案 1 :(得分:3)

如果您看到锯齿状边缘,可以通过添加图形渲染提示来解决这个问题。

另外,在完成图形上下文后调用dispose()是个好主意。

Graphics2D ig2 = bi.createGraphics();
ig2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
diagram.render(ig2);
ig2.dispose();

ImageIO.write(bi, "PNG", new File("./yourImageName.png"));