最近遇到了需要后端把svg和echart的base64内容的数据保存为png格式的图片;做个总结,代码如下:
1.保存svg的图片
content为svg内容,path为保存的文件路径
public static void saveSvgToPng(String content, String path) {
InputStream svgFileStream;
try {
svgFileStream = new ByteArrayInputStream(content.getBytes("UTF-8"));
} catch (Exception e) {
svgFileStream = new ByteArrayInputStream(content.getBytes());
log.error("saveSvgToPng error:{}" + e);
}
TranscoderInput inputSvgImage = new TranscoderInput(svgFileStream);
PNGTranscoder converter = new PNGTranscoder();
FileOutputStream pngFileStream;
try {
pngFileStream = new FileOutputStream(path);
TranscoderOutput outputPngImage = new TranscoderOutput(pngFileStream);
converter.transcode(inputSvgImage, outputPngImage);
} catch (FileNotFoundException e) {
log.error("FileOutputStream new error:{}" + e);
} catch (TranscoderException e) {
log.error("TranscoderException error:{}" + e);
}
}
2.保存echart base64内容为png
public static void saveEchartToPng(String base64Info, String path) {
if (StringUtils.isEmpty(base64Info)) {
throw new CustomParameterizedException("无效的图片内容!");
}
base64Info = base64Info.replaceAll(" ", "+");
String[] arr = base64Info.split("base64,");
OutputStream out = null;
try {
byte[] buffer = Base64.decodeBase64(arr[1]);
out = new FileOutputStream(path);
out.write(buffer);
} catch (IOException e) {
log.error("解析Base64图片信息并保存到某目录下出错!", e);
} finally {
IOUtils.closeQuietly(out);
}
}