Java - 使用SVGGraphics2D从PNG文件生成SVG文件

时间:2016-09-28 05:48:28

标签: java image-processing svg bufferedimage graphics2d

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

问题:在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);
}

1 个答案:

答案 0 :(得分:0)

首先,您没有指定哪个库提供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);
}

试试。