代码之家  ›  专栏  ›  技术社区  ›  jonask

将SVG元素转换为img

  •  0
  • jonask  · 技术社区  · 5 年前

    所有相关问题都没有答案。 我想从DOM中获取SVG图形,并将其转换为img。

    这就是我现在的功能

    const SVG = document.querySelector('svg')!;
    const canvas = document.createElement('canvas');
    
    const XML = new XMLSerializer().serializeToString(SVG);
    const SVG64 = btoa(XML);
    const image64 = 'data:image/svg+xml;base64,' + SVG64;
    
    const img = new Image();
    img.onload = function() {
      canvas.getContext('2d')!.drawImage(img, 0, 0);
    };
    
    img.src = image64;
    
    document.getElementById('container')!.appendChild(img);
    

    还有大教堂

    <svg xmlns="http://www.w3.org/2000/svg" width="50" height="50">
       <circle cx="25" cy="25" r="20" />
    </svg>
    
    <div id="container"></div>
    

    1 回复  |  直到 5 年前
        1
  •  3
  •   num8er    5 年前

    监视错误:

    const SVG = document.querySelector('svg')!;
    const XML = new XMLSerializer().serializeToString(SVG);
    const SVG64 = btoa(XML);
    
    const img = new Image();
    img.height = 500;
    img.width = 500;
    img.src = 'data:image/svg+xml;base64,' + SVG64;
    
    document.getElementById('container')!.appendChild(img);
    SVG:<br/>
    <svg xmlns="http://www.w3.org/2000/svg" width="50" height="50">
       <circle cx="25" cy="25" r="20" />
    </svg>
    
    <hr/>
    
    <div id="container" style="background: red;">
    </div>

    你好像有意见 ! 标志: document.querySelector('svg')! canvas.getContext('2d')! , document.getElementById('container')!

    作为良好实践,请打开浏览器的“检查器”面板的“控制台”选项卡以查看错误消息。

    经过长时间的讨论,我了解到您的js代码位于html元素之上。

    检查这个:

    window.onload = function() {
      renderSVG();
    }
    
    const renderSVG = function() {
      const container = document.getElementById('container');
      const svg = document.querySelector('svg');
    
      if (container && svg) { // since You want to check existence of elements
        const XML = new XMLSerializer().serializeToString(svg);
        const SVG64 = btoa(XML);
    
        const img = new Image();
        img.height = 500;
        img.width = 500;
        img.src = 'data:image/svg+xml;base64,' + SVG64;
    
        container.appendChild(img);
      }
    };
    SVG:<br/>
    <circle cx=“25”cy=“25”r=“20”/>
    </svg>
    
    <hr/>
    
    <div id=“container”style=“background:red;”gt;