2012-01-19 15 views
7

Questa è la domanda, l'ho vista perché SVG-Salamander è abbastanza piccolo per i miei progetti. Ma non so se posso usarlo per quello né come farlo.Posso usare SVG Salamander per rasterizzare gli SVG nei file PNG? (e come posso farlo?)

Qualche idea?

Se non riesco, Conoscete altri piccoli rasterizer SVG in PNG in java?

grazie per tutto.

ho di questo codice:?

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

} 

Ma le immagini non sono uniformi :(, ogni idea

+0

Sono di fronte a un problema simile, le immagini PNG non sono uniformi. C'è un modo per risolverlo? – ayachama

risposta

3

Sì, è possibile Tutto quello che dovete fare è caricare il documento SVG usando. SVG Salamander, crea una BufferedImage a cui vuoi scrivere, crea un contesto Graphics2D da BufferedImage, quindi chiama il metodo render() su SVGDiagram per disegnare sull'immagine 1.

Puoi semplificare il processo usando un SVGIcon Gestirà tutte le interne di Salamander per y ou e puoi trattare il tuo documento SVG come un'oscillazione normale.

Se stai pensando di convertire molti file SVG in immagini sulla riga di comando, c'è anche un'attività Ant che ti permetterà di convertire SVG in immagini da uno script ant.

SVG Salamander docs di utilizzo: http://svgsalamander.java.net/docs/use.html

Un semplice demo utilizza SVG Salamander con swing: http://svgsalamander.java.net/docs/exampleCode/SVGIODemo.html

+0

Non riesco ad usare la Ant perché li renderò a .png quando viene installata l'app per android. Ma grazie per le informazioni, proverò e poi ti parlerò del risultato. –

3

Se stai vedendo bordi frastagliati, si può risolvere che aggiungendo una grafica di rendering suggerimento.

Inoltre, è una buona idea chiamare dispose() quando hai finito con il tuo contesto grafico.

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

Testerò il codice questa notte. Salamander è una grande lib, grazie per questo. –

+0

L'ho provato, e rende bene. Sei un campione per questo. –

+0

Il mio file SVG ha molti dettagli in esso. Ha dei piccoli testi che appaiono sfocati e non possono essere letti quando convertiti in PNG. – ayachama

Problemi correlati