Quantcast
Channel: Convert SVG to image (JPEG, PNG, etc.) in the browser - Stack Overflow
Viewing all articles
Browse latest Browse all 17

Answer by worstenbrood for Convert SVG to image (JPEG, PNG, etc.) in the browser

$
0
0

This seems to work in most browsers:

function copyStylesInline(destinationNode, sourceNode) {   var containerElements = ["svg","g"];   for (var cd = 0; cd < destinationNode.childNodes.length; cd++) {       var child = destinationNode.childNodes[cd];       if (containerElements.indexOf(child.tagName) != -1) {            copyStylesInline(child, sourceNode.childNodes[cd]);            continue;       }       var style = sourceNode.childNodes[cd].currentStyle || window.getComputedStyle(sourceNode.childNodes[cd]);       if (style == "undefined" || style == null) continue;       for (var st = 0; st < style.length; st++){            child.style.setProperty(style[st], style.getPropertyValue(style[st]));       }   }}function triggerDownload (imgURI, fileName) {  var evt = new MouseEvent("click", {    view: window,    bubbles: false,    cancelable: true  });  var a = document.createElement("a");  a.setAttribute("download", fileName);  a.setAttribute("href", imgURI);  a.setAttribute("target", '_blank');  a.dispatchEvent(evt);}function downloadSvg(svg, fileName) {  var copy = svg.cloneNode(true);  copyStylesInline(copy, svg);  var canvas = document.createElement("canvas");  var bbox = svg.getBBox();  canvas.width = bbox.width;  canvas.height = bbox.height;  var ctx = canvas.getContext("2d");  ctx.clearRect(0, 0, bbox.width, bbox.height);  var data = (new XMLSerializer()).serializeToString(copy);  var DOMURL = window.URL || window.webkitURL || window;  var img = new Image();  var svgBlob = new Blob([data], {type: "image/svg+xml;charset=utf-8"});  var url = DOMURL.createObjectURL(svgBlob);  img.onload = function () {    ctx.drawImage(img, 0, 0);    DOMURL.revokeObjectURL(url);    if (typeof navigator !== "undefined"&& navigator.msSaveOrOpenBlob)    {        var blob = canvas.msToBlob();                 navigator.msSaveOrOpenBlob(blob, fileName);    }     else {        var imgURI = canvas            .toDataURL("image/png")            .replace("image/png", "image/octet-stream");        triggerDownload(imgURI, fileName);    }    document.removeChild(canvas);  };  img.src = url;}

Viewing all articles
Browse latest Browse all 17

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>