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 保存在磁盘上并将以下 transcoderinput 与 uri 构造函数一起使用,那么它可以工作。但就我而言,我不想保存在磁盘上。

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

1 回答 1

4

我发现了问题。

我每次检查 svgstream 是否正常。为了查看是否可以,我每次创建一个 SVG 文件,并在我的注释中添加代码。从逻辑上讲,它消耗了流。最后没有真正的流。它导致了异常。谢谢大家..

于 2011-11-18T10:31:47.350 回答