Я получаю org. apache .batik.bridge.BridgeException от apache png транскодера - PullRequest
0 голосов
/ 05 апреля 2020

Я хочу сгенерировать png из строки svg с этим кодом:

                    try {
                        PNGTranscoder coder = new PNGTranscoder();
                        StringReader reader = new StringReader(getSVG());
                        TranscoderInput input = new TranscoderInput(reader);
                        FileOutputStream outputStream = new FileOutputStream("tmp/tmp.png");
                        TranscoderOutput transcoderOutput = new TranscoderOutput(outputStream);
                        try{
                            coder.transcode(input, transcoderOutput);
                        }finally{
                            reader.close();
                            outputStream.close();
                        }
                    } catch (Exception e) {
                        ErrorHandler.getInstance().handle(e);
                    }

Но если я запускаю код, я получаю исключение, потому что URI не может быть открыт, потому что он поврежден или не поддерживается:

org.apache.batik.bridge.BridgeException: null:0
The URI "https://cdn.discordapp.com/avatars/xxx/xxx.png"
on element <image> can't be opened because:
JDK URL is corrupt or unsupported variant
    at org.apache.batik.bridge.UserAgentAdapter.getBrokenLinkDocument(UserAgentAdapter.java:449)
    at org.apache.batik.bridge.SVGImageElementBridge.createRasterImageNode(SVGImageElementBridge.java:604)
    at org.apache.batik.bridge.SVGImageElementBridge.createImageGraphicsNode(SVGImageElementBridge.java:327)
    at org.apache.batik.bridge.SVGImageElementBridge.buildImageGraphicsNode(SVGImageElementBridge.java:177)
    at org.apache.batik.bridge.SVGImageElementBridge.createGraphicsNode(SVGImageElementBridge.java:119)
[...]

При преобразовании этого svg: https://hastebin.com/mamudofira.xml

URL-адрес изображения заменен для конфиденциальности, но он работает!

1 Ответ

0 голосов
/ 06 апреля 2020

Я сам исправил это, сначала загрузив изображение в виде строки base64, а затем установив его как xlink:href в svg.

...