Java 如何动态地将SVG转换为PNG
我尝试将svg转换为PNG。svg文档作为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
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它来自Apacheorg.Apache.commons.io.IOUtils;
TranscoderInput input = new TranscoderInput(new File("c:/a.svg").toURI().toString());