5

SVG イメージを生成し、Apache Batik を使用して PNG にトランスコードしようとしています。しかし、空の画像になってしまい、その理由がわかりません。

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

私の問題は、結果の画像が空で、その理由がわからないことです。ヒントはありますか?

4

1 に答える 1

1

SVGドキュメントの作成方法に依存すると思います。あなたは何のために使用svgGeneratorしていますか(私はこれが であると仮定しますSVGGraphics2D)?

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

で SVG ドキュメントを作成した場合はdocument、それをTranscoderInputコンストラクタに渡す必要があります。

このページには、SVG DOM を JPEG にラスタライズする例があります。

于 2010-03-04T07:39:31.760 に答える