svg 转 图片 base64

思路就是 把SVG 转成 DOM文档序列化为XML字符串 , 在用 canvas 渲染图片 

<!DOCTYPE html>
<html>
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <meta http-equiv="X-UA-Compatible" content="ie=edge">
  <title>svg转png</title>
</head>
<body>
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0,0,238,200" id="svg" width="476" height="422">
    <defs>
        <pattern id="raduisImage" patternUnits="objectBoundingBox" width="32" height="32">
            <image xlink:href="https://profile.csdnimg.cn/E/6/D/3_web_xiaolei" x="0" y="0" width="32" height="32" />
        </pattern>
        <linearGradient id="linearGradient" x1="0%" y1="0%" x2="0%" y2="100%">
            <stop offset="0%" style="stop-color:rgb(3,0,21);stop-opacity:1"/>
            <stop offset="60%" style="stop-color:rgb(30,12,109);stop-opacity:1"/>
            <stop offset="100%" style="stop-color:rgb(5,1,26);stop-opacity:1"/>
        </linearGradient>
    </defs>
    <rect x="0" y="0" width="238" height="120" style="fill:url(#linearGradient)"/>
    <rect width="226" height="96" x="5" y="14" style="fill:white;stroke-width:0;opacity:0.1;" />
    <text x="16" y="35" style="font-size:11;fill:white;font-weight:600;">svg转 base64串 图片</text>
    <line x1="12" y1="50" x2="225" y2="50" style="stroke:#AFABBF;stroke-width:1"/>
    <circle cx="32" cy="76" r="16" fill="url(#raduisImage)"></circle>
    <text x="53" y="70" style="font-size:10;fill:white;">web_xiaolei</text>
    <text x="53" y="82" style="font-size:8;fill:white;">程序虐我千百遍,我待程序如初恋</text>
</svg>

<img src="" id="imgBase64" alt="" >
<script type="text/javascript">
    
    var serializer = new XMLSerializer();
    var svg = document.getElementById('svg');
    var source = serializer.serializeToString(svg);
    source = '<?xml version = "1.0" standalone = "no"?>\r\n' + source;
    var url = "data:image/svg+xml;charset=utf-8," + encodeURIComponent(source);
    document.getElementById('imgBase64').setAttribute('src',url);
      
    // const img = new Image()
    // img.src = url
    // img.onload = function () {
    //     const canvas = document.createElement('canvas')
    //     canvas.width = img.width
    //     canvas.height = img.height
    //     const ctx = canvas.getContext('2d')
    //     ctx.drawImage(img, 0, 0)
    //     const ext = img.src.substring(img.src.lastIndexOf('.') + 1).toLowerCase()
    //     const dataURL = canvas.toDataURL('image/' + ext)
    //     console.log(dataURL)
    // }
    
    let xhr = new XMLHttpRequest()
    xhr.open('get', url, true)
    xhr.responseType = 'blob'
    xhr.onload = function () {
        if (this.status == 200) {
            let blob = this.response
            let oFileReader = new FileReader()
            oFileReader.onloadend = function (e) {
                const base64 = e.target.result;
                console.log(1221)
                console.log(base64)
            }
            oFileReader.readAsDataURL(blob)
        }
    }
    xhr.send()
    
</script>
</body>
</html>

  • 10
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值