Получить пустое изображение при перекодировании SVG в PNG - PullRequest
5 голосов
/ 03 марта 2010

Я пытаюсь сгенерировать SVG-изображение, а затем перекодировать его в PNG с помощью Apache Batik. Тем не менее, я получаю пустое изображение и не понимаю, почему.

Я использую Документ из SVGDomImplementation в качестве основы для моего транскодирования (чтобы не записывать SVG на диск и не загружать его снова). Вот пример:

  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();
  }

Моя проблема в том, что полученное изображение пустое, и я не понимаю, почему. Есть намеки?

1 Ответ

1 голос
/ 04 марта 2010

Я думаю, это зависит от того, как вы создаете документ SVG. Для чего вы используете svgGenerator (что я предполагаю SVGGraphics2D)?

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

Если вы создали документ SVG в document, то вам следует передать его конструктору TranscoderInput.

На этой странице приведен пример растеризации SVG DOM в JPEG.

...