我有一个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包含来自外部源的图像
答案 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();