2010-03-03 2 views
5

Ich versuche, ein SVG-Bild zu generieren und es dann mit Apache Batik in PNG zu transcodieren. Ich habe jedoch ein leeres Bild und ich kann nicht sehen warum.Erhalten Sie ein leeres Bild beim Umcodieren von SVG nach PNG

Ich benutze das Dokument von SVGDomImplementation als Basis für meine Transcodierung (um zu vermeiden, die SVG auf die Festplatte zu schreiben und sie erneut zu laden). Hier ist ein Beispiel:

DOMImplementation domImpl = SVGDOMImplementation.getDOMImplementation(); 
    String namespace = SVGDOMImplementation.SVG_NAMESPACE_URI; 
    Document document = domImpl.createDocument(namespace, "svg", null); 

    //stuff that builds SVG (and works) 

    TranscoderInput transcoderInput = new TranscoderInput(svgGenerator.getDOMFactory()); 
    PNGTranscoder transcoder = new PNGTranscoder(); 
    transcoder.addTranscodingHint(PNGTranscoder.KEY_WIDTH, new Float(svgWidth)); 
    transcoder.addTranscodingHint(PNGTranscoder.KEY_HEIGHT, new Float(svgHeight)); 

    try { 
    File temp = File.createTempFile(key, ".png"); 
    FileOutputStream outputstream = new FileOutputStream(temp); 

    TranscoderOutput output = new TranscoderOutput(outputstream); 

    transcoder.transcode(transcoderInput, output); 
    outputstream.flush(); 
    outputstream.close(); 
    name = temp.getName(); 
    } catch (IOException ioex) { 
    ioex.printStackTrace(); 
    } catch (TranscoderException trex) { 
    trex.printStackTrace(); 
    } 

Mein Problem ist, dass das resultierende Bild leer ist und ich kann nicht sehen warum. Irgendwelche Hinweise?

Antwort

1

Ich denke, es hängt davon ab, wie Sie das SVG-Dokument erstellen. Was verwendest du für svgGenerator (von denen ich annehme, ist ein SVGGraphics2D)?

TranscoderInput transcoderInput = new TranscoderInput(svgGenerator.getDOMFactory()); 

Wenn Sie das SVG-Dokument in document aufgebaut haben, dann sollten Sie es an den TranscoderInput Konstruktor übergeben.

This page enthält ein Beispiel für die Rasterung eines SVG-DOM zu einem JPEG.

+0

Richtig, der SVGGenerator ist ein SVGGraphics2D. Die Funktion getDOMFactory() gibt das gleiche Dokument/Objekt zurück, das ich am Anfang der Methode erstellt habe. Es macht also keinen Unterschied. Ich war schon mehrmals über das JPEG-Beispiel. Vielleicht ist es nicht genug, dieses Beispiel in PNG zu ändern (ich habe dieses spezielle Beispiel nicht wirklich getestet), und vielleicht benötigt der PNG-Transcoder einige andere/zusätzliche Einstellungen, die ich nicht sehe. Ich löste mein tatsächliches Problem (das SVG in eine PDF richtig zu bekommen) auf eine andere Weise, so dass dies nicht mehr benötigt wird. – fiskeben

Verwandte Themen