如何动态将 SVG 转换为 PNG

2022-09-04 04:35:53

我尝试将svg转换为PNG。svg 文档以 .Inputstream

首先,我将 svg 流转换为字节数组:

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

然后,我使用以下代码将字节转换为(PNG)。OutputStream

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

答案 1

我发现了问题。

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


答案 2

推荐