2012-01-19 33 views
7

这就是问题所在,我已经看到它导致SVG-Salamander足够小到我的项目。但我不知道我是否可以使用它,既不知道如何去做。我可以使用SVG Salamander将SVG光栅化为PNG文件吗? (我怎么能这样做?)

有什么想法?

如果我不能,你知道任何其他的小型SVG到Java的PNG光栅化器吗?

谢谢大家。

我已经使用此代码:

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")); 

} 

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

+0

我面临的是模拟问题,png图像不平滑。有没有办法解决它? – ayachama

回答

3

是的,有可能所有你需要做的是使用加载SVG文件。 SVG Salamander,创建一个你想要写入的BufferedImage,从你的BufferedImage创建一个Graphics2D上下文,然后调用SVGDiagram上的render()方法来绘制你的图像

你可以通过使用SVGIcon它会处理y的所有Salamander内部ou,您可以将您的SVG文档视为普通的Swing图标。

如果您打算在命令行上将很多SVG文件转换为图像,还有一个Ant任务可让您将SVG转换为来自ant脚本的图像。

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

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

+0

我无法使用Ant,因为我会在android应用程序被安装时将它们呈现给.png。但是,谢谢你的信息,我会尝试然后我会告诉你有关结果。 –

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")); 
+0

今天晚上我会测试你的代码。蝾螈是一个非常伟大的自由,感谢它。 –

+0

我已经测试过了,它很好地呈现。你是这方面的冠军。 –

+0

我的SVG文件中有很多细节。它有小的文字,看起来很模糊,转换成PNG时不可读。 – ayachama