14

svg を PNG に変換しようとしています。svg ドキュメントはサーバーからInputstream.

まず、svg ストリームを次のようにバイト配列に変換します。

 byte[] streamBytes = IOUtils.toByteArray(svgStream);

OutputStream次に、次のコードでバイトを (PNG) に変換します。

private ByteArrayOutputStream svgToPng(byte[] streamBytes)
                                            throws TranscoderException, IOException {
        PNGTranscoder t = new PNGTranscoder();
        TranscoderInput input = new TranscoderInput(new ByteArrayInputStream(streamBytes));
        ByteArrayOutputStream ostream = new ByteArrayOutputStream();
        TranscoderOutput output = new TranscoderOutput(ostream);

        t.transcode(input, output);

        ostream.flush();
        // ostream.close();
        return ostream;
    }

t.transcode(input, output);しかし、「 」によってヌルポインタ例外が発生します

org.apache.batik.transcoder.TranscoderException: null
Enclosed Exception:
Premature end of file.
graphdata : null
    at org.apache.batik.transcoder.XMLAbstractTranscoder.transcode(XMLAbstractTranscoder.java:136)
    at org.apache.batik.transcoder.SVGAbstractTranscoder.transcode(SVGAbstractTranscoder.java:156)

注: svgstream をディスクに保存し、uri コンストラクターで次のトランスコーダー入力を使用すると、機能します。しかし、私の場合、ディスクに保存したくありません。

TranscoderInput input = new TranscoderInput(new File("c:/a.svg").toURI().toString());
4

1 に答える 1

4

問題が見つかりました。

svgstreamが大丈夫かどうか毎回チェックしました。大丈夫かどうかを確認するために、コメントにコードを含むSVGファイルを毎回作成しました。論理的には、ストリームを消費しました。最後に本当の流れはありませんでした。例外が発生しました。ありがとうございます..

于 2011-11-18T10:31:47.350 に答える