Как конвертировать SVG в PNG на лету

Я пытаюсь преобразовать SVG в PNG. документ svg поступает с сервера как входной поток .

Сначала я конвертирую поток 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());
14
задан Kayser 17 November 2011 в 13:36
поделиться