svg如何转canvas

本文介绍了如何将SVG转换为Canvas,重点强调了在转换过程中设置Canvas尺寸和处理缩放的重要性,以确保图像质量不受影响。通过使用drawImage函数,并详细参照MDN文档,可以实现SVG到Canvas的有效转换。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

发现一篇比较好的总结。

DataURL与File,Blob,canvas对象之间的互相转换的Javascrip

其中在blob转canvas的时候,其实还是需要详细设置参数的,特别是对于svg这种可以任意缩放的格式。

首先需要确定canvas的大小,默认的canvas是300像素宽的。 需要正确设定canvas的大小。

其次需要确定是否需要缩放,svg的大小不一定是canvas的大小,但是可以任意缩放而不会变模糊。

示例代码:

          var img = new Image();
          img.onload = function () {
            const scale = 2;  // 缩放参数
            const w = img.width * scale;
            const h = img.height * scale;
            const canvas = document.createElement('canvas');
            canvas.width = w;
            canvas.height = h;
            const ctx = canvas.getContext('2d');

            ctx.drawImage(img, 0, 0, w, h); // 核心函数

            // ......
          }
          img.src = url; //可以是其他来源,或者URL, 或者base64, 或者svg内联字符串
           // 更多svg 格式和相互转化可以参考  https://www.zhangxinxu.com/wordpress/2018/08/css-svg-background-image-base64-encode/

drawImage函数的详细说明:

https://developer.mozilla.org/zh-CN/docs/Web/API/CanvasRenderingContext2D/drawImage

完整示例源码:

      var reader = new FileReader();

      // Closure to capture the file information.
      reader.onload = function(e) {
        var cb = function (r) {
          if (that.imageUploadCallback) {
            that.imageUploadCallback(r);
          }
        }

        if (file.type === 'image/svg+xml') { // trans svg to png, for circumvent html2canvas bugs
          var img = new Image();
          img.onload = function () {
            // console.log(img, img.width, img.height);


            const scale = 2;  // 缩放参数
            const w = img.width * scale;
            const h = img.height * scale;
            const canvas = document.createElement('canvas');
            canvas.width = w;
            canvas.height = h;
            const ctx = canvas.getContext('2d');

            ctx.drawImage(img, 0, 0, w, h); // 核心函数

            var b64;
            try {
              b64 = canvas.toDataURL("image/png");
            } catch (err) {
              console.log(err);
              alert(err);
            }

            // console.log(b64);

            cb(b64);
          }
          img.src = e.target.result;
        } else {
          // console.log(e.target.result);
          cb(e.target.result);
        }
      };

      // Read in the image file as a data URL.
      reader.readAsDataURL(file);

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值