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

问题描述 投票:7回答:2

我已经看到它导致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"));

}

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

svg png rasterize svg-salamander
2个回答
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

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


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"));
© www.soinside.com 2019 - 2024. All rights reserved.