Convert embedded SVG to PNG in-place

后端 未结 6 716
自闭症患者
自闭症患者 2020-11-29 17:20

I\'m generating HTML from a Docbook source while using SVG for images (converted from MathML). This works fine for some browsers that can interpret SVG, but fails for others

6条回答
  •  日久生厌
    2020-11-29 18:06

    I took @Phrogz code above and made a working snippet. Not sure mySVG.clientWidth works in FF though. It also available here - https://jsfiddle.net/LLjLpo05/

    var mySVG = document.querySelector('#svblock'),        // Inline SVG element
        tgtImage = document.querySelector('#diagram_png'), // Where to draw the result
        can = document.createElement('canvas'), // Not shown on page
        ctx = can.getContext('2d'),
        loader = new Image; // Not shown on page
    
    //loader.width  = can.width  = tgtImage.width = mySVG.getBBox().width;
    //loader.height = can.height = tgtImage.height = mySVG.getBBox().height;
    
    loader.width = can.width = tgtImage.width = mySVG.clientWidth;
    loader.height = can.height = tgtImage.height = mySVG.clientHeight;
    
    loader.onload = function() {
      ctx.drawImage(loader, 0, 0, loader.width, loader.height);
      tgtImage.src = can.toDataURL();
    };
    var svgAsXML = (new XMLSerializer).serializeToString(mySVG);
    loader.src = 'data:image/svg+xml,' + encodeURIComponent(svgAsXML);
    blockdiag discovery execution reporting

    UPDATE: Refactored a bit - https://jsfiddle.net/e4r8sk18/1/

    UPDATE2: Refactored into converter class - https://jsfiddle.net/07a93Lt6/5/

提交回复
热议问题