2016-09-28 1485 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