2016-09-28 199 views
-1

我正在使用SVGGraphics2D创建一个SVG文件。通过在其上绘制形状,我可以将SVG文件作为输出,但是我需要的是在bugsferedmage中创建一个PNG文件,该文件在SVG文档中绘制。以下是我正在使用的当前代码。Java - 使用SVGGraphics2D从PNG文件生成SVG文件

问题:什么应该是在SVG文档中绘制bufferedimage的正确过程?

从源头上绘制图像的方法。

public void paintImage(Graphics g) throws IOException { 
    File imageSrc = new File("C:\\Users\\anthony\\Downloads\\SVGGraphics2D\\src\\svggraphics\\eg.png"); 
    BufferedImage img = ImageIO.read(imageSrc); 

    Graphics2D g2d = (Graphics2D) img.getGraphics(); 
    g2d.drawImage(img,0,0,null); 
} 

创建SVG文档。

public static void main(String [] args) throws IOException { 
    DOMImplementation domImpl = GenericDOMImplementation.getDOMImplementation(); 

    String svgNS = "http://www.w3.org/2000/svg"; 
    Document document = domImpl.createDocument(svgNS, "svg", null); 

    SVGGraphics2D graphics = new SVGGraphics2D(document); 

    TestSVGGenerator test = new TestSVGGenerator(); 
    test.paintImage(graphics); 

    boolean useCSS = true; 
    Writer out = new OutputStreamWriter(new FileOutputStream("test.svg"), "UTF-8"); 
    graphics.stream(out, useCSS); 
} 
+0

我没有看到任何问题。顺便说一句。 SVG是2D矢量格式,但具有存储2D位图的功能,但这不是存储图像的有效方式。 – Spektre

+0

谢谢。但是,是否可以直接将PNG图像转换为SVG?因为我已经尝试将PNG图像转换为它的Base64到SVG,但它仍然不起作用。 – ACM

+0

我不认为SVG本地支持PNG块。您很可能必须将您的PNG转换为未压缩的图像并将其存储。不知道你使用的库是否支持这种功能,但是你仍然可以将程序块添加到SVG中,这只是XML,请参阅SVG文档以了解如何... – Spektre

回答

1

首先,您不指定哪个库提供SVGGraphics2D类。这是你忽略的重要信息。所以以下是一些猜测。

其次,您将SVGGraphics2D的实例传递给paintImage(),但不要使用它。我怀疑你应该写的是:

public void paintImage(Graphics g) throws IOException { 
    File imageSrc = new File("C:\\Users\\anthony\\Downloads\\SVGGraphics2D\\src\\svggraphics\\eg.png"); 
    BufferedImage img = ImageIO.read(imageSrc); 

    g.drawImage(img,0,0,null); 
} 

试试看。

+0

非常感谢!我能够在SVG文档中绘制图像。 – ACM