如何在运行中将SVG转换为PNG

时间:2011-11-17 13:36:46

标签: java svg png batik

我尝试将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保存在磁盘上并使用以下transcoderinput和uri构造函数,那么它可以工作。但在我的情况下,我不想保存在磁盘上。

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

1 个答案:

答案 0 :(得分:4)

我发现了问题。

我每次检查svgstream是否正常。为了查看它是否正常,我每次创建一个SVG文件,其中包含我的评论中的代码。逻辑上它消耗了流。最后没有真正的流。它导致了异常。 感谢所有..