javascript svg转canvas和image

代码(内含注释)

<!DOCTYPE html>
<html>

<head>
    <title></title>
</head>

<body>
    <div id="svg-wrap">
        <svg width="200" height="200" xmlns='http://www.w3.org/2000/svg'>
            <rect width="200" height="200" style="fill:#ddd"></rect>
        </svg>
    </div>
    <canvas id="canvas"></canvas>
    <script>
    window.onload = function(){
        //获取svg内容
        var svg = document.getElementById('svg-wrap').innerHTML;

        var canvas = document.getElementById('canvas');
        var c = canvas.getContext('2d');

        //新建Image对象
        var img = new Image();

        //svg内容
        img.src = 'data:image/svg+xml,' + unescape(encodeURIComponent(svg));//svg内容中可以有中文字符
        img.src = 'data:image/svg+xml,' + svg;//svg内容中不能有中文字符

        //svg编码成base64
        img.src = 'data:image/svg+xml;base64,' + window.btoa(unescape(encodeURIComponent(svg)));//svg内容中可以有中文字符
        img.src = 'data:image/svg+xml;base64,' + window.btoa(svg);//svg内容中不能有中文字符

        //图片初始化完成后调用
        img.onload = function() {
            //将canvas的宽高设置为图像的宽高
            canvas.width = img.width;
            canvas.height = img.height;
            
            //canvas画图片
            c.drawImage(img, 0, 0);

            //将图片添加到body中
            document.body.appendChild(img)
        }
    }
    </script>
</body>

</html>

效果图

svg标签一定要加属性xmlns='http://www.w3.org/2000/svg'
svg标签一定要加属性xmlns='http://www.w3.org/2000/svg'
svg标签一定要加属性xmlns='http://www.w3.org/2000/svg'
不然svg内容和base64添加到img.src会出错,canvas和image都不会在页面显示出来

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,168评论 19 139
  • 注:本文翻译自developer.mozilla.org/en/docs/Web/SVG/Namespaces_C...
    wengjq阅读 12,671评论 1 14
  • 1. XML简介 以下内容来自于http://www.w3school.com.cn/xml 基本知识 XML 和...
    WebSSO阅读 1,979评论 1 7
  • SVG 有一些预定义的形状元素,可被开发者使用和操作。 SVG 形状 SVG 有一些预定义的形状元素,可被开发者使...
    何wife阅读 266评论 0 0
  • 一:canvas简介 1.1什么是canvas? ①:canvas是HTML5提供的一种新标签 ②:HTML5 ...
    GreenHand1阅读 4,756评论 2 32