Java 如何动态地将SVG转换为PNG

Java 如何动态地将SVG转换为PNG,java,svg,png,batik,Java,Svg,Png,Batik,我尝试将svg转换为PNG。svg文档作为Inputstream 首先,我使用以下命令将svg流转换为字节数组: byte[] streamBytes = IOUtils.toByteArray(svgStream); 然后我用下面的代码将字节转换成OutputStream(PNG) private ByteArrayOutputStream svgToPng(byte[] streamBytes) th

我尝试将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(输入,输出);
”得到空指针异常

注意:如果我将svgstream保存在th磁盘上,并使用以下带有uri构造函数的TranscodeInput,那么它可以工作。但在我的情况下,我不想保存在磁盘上

TranscoderInput input = new TranscoderInput(new File("c:/a.svg").toURI().toString());
我发现了问题。 我每次都检查svgstream是否正常。为了查看是否正常,我每次都创建了一个SVG文件,其中包含我的注释中的代码。从逻辑上讲,它消耗了流。最后没有真正的溪流。这导致了例外。
感谢所有..

您是否验证了
streamBytes
是否正确?这与您尝试保存到磁盘的字节数组完全相同吗?@jon skeet,如我所说,如果我将其保存到磁盘上作为svg。它工作得很好。我用创建了一个svg。然后它成功地实现了转化
如果(!File.exists()){File.createNewFile();}OutputStream out=new FileOutputStream(File);int read=0;byte[]bytes1=new byte[1024];而((read=svgStream.read(bytes1))!=-1{out.write(字节1,0,读取);}out.flush();out.close();}catch(IOException e){//TODO自动生成的catch块e.printStackTrace();}这里的
svgStream
是什么?我的观点是,如果您使用不同的代码创建了文件到
streamBytes
,那么(比如)
IOUtils.toByteArray
中可能会有错误。
IOUtils
的实现在哪里?(有各种不同的开源文件,也可能是您自己的)@jon skeet它来自Apache
org.Apache.commons.io.IOUtils;
TranscoderInput input = new TranscoderInput(new File("c:/a.svg").toURI().toString());