如何使用Java解码window.btoa编码的base64图像

时间:2016-04-26 10:46:46

标签: javascript java svg

我有一个svg图像,我想导出为png。

在客户端使用javascript,我将其转换为base64

var s = new XMLSerializer().serializeToString(document.getElementById("svg"))
var encodedData = window.btoa(s);

在服务器端,我想解码它并创建一个.png文件

BASE64Decoder decoder = new BASE64Decoder();
byte[] imageByte = decoder.decodeBuffer(string);

但是这给了我一个无法打开的文件。

或者还有其他方法可以将svg导出为png。我不能使用toDataUrl,因为我的svg包含来自外部源的图像

3 个答案:

答案 0 :(得分:0)

Java 8支持Base 64编码和解码

您可以按照以下方式执行此操作

byte [] barr = Base64.getDecoder().decode(encoded); 

但是,为什么要将它作为基本的64位编码字符串传递?为什么不将图像作为multipart / form-data发送?

答案 1 :(得分:0)

对于mime类型解码,请使用此

byte[] decodedBuffer = Base64.getMimeDecoder().decode( encodedBuffer );

资源链接:https://examples.javacodegeeks.com/core-java/util/base64/java-8-base64-encoding-example/

答案 2 :(得分:0)

解码后的字节数组为svg格式。使用一些库将其转换为png(我正在使用 apache batik transcoder

    BASE64Decoder decoder = new BASE64Decoder();
    byte[] image = decoder.decodeBuffer(string);
    String fileLocation  = "C:\temp";
    String fileName = "New-" + System.currentTimeMillis();
    File file = new File(fileLocation +File.separator+ fileName + ".svg");
    FileOutputStream fop = new FileOutputStream(file);
    if (!file.exists()) {
      file.createNewFile();
    }
    fop.write(image);
    fop.flush();
    fop.close();
    PNGTranscoder transcoder = new PNGTranscoder();
    TranscoderInput tinput = new TranscoderInput(new FileInputStream(fileLocation + File.separator + fileName +".svg"));
    OutputStream ostream = new FileOutputStream(fileLocation + File.separator + fileName +".png");
    TranscoderOutput toutput = new TranscoderOutput(ostream);
    try {
          transcoder.transcode(tinput, toutput);
    } catch (TranscoderException e) { 
          System.out.println("error*");
           e.printStackTrace();
    }
    ostream.close();