前端方案
实时保存为Base64
用户通过界面操作SVG内容,当生成或者编辑SVG时,实时将SVG内容转换成Base64编码的img标签,塞回到原来的DOM节点中。此种方式在前端通过浏览器就可以完成,无须后端的参与。
方案原理是使用canvas做中转,将svg+xml转换成png。在无需后端参与做二次处理时,可以满足业务场景。
// 前端demo代码
function drawInlineSVG($svg, callback) {
var svg = $svg[0];
svg.innerHTML = '<rect width="100%" height="100%" fill="#ffffff"></rect>' + svg.innerHTML;
var svgData = new XMLSerializer().serializeToString( svg );
var canvas = document.createElement( "canvas" );
var ctx = canvas.getContext( "2d" );
var img = document.createElement( "img" );
img.setAttribute( "src", "data:image/svg+xml;base64," + btoa( unescape(encodeURIComponent(svgData)) ) );
img.onload = function () {
ctx.drawImage( img, 0, 0 );
canvas.toDataURL( "image/png" );
callback && callback(this);
};
var $img = $(img);
$img.height($svg.height());
$img.width($svg.width());
return $img;
}
前端生成png,定时提交到后台
在需要后台做二次处理时,可以借助于上述的前端方案,通过aj