svg转png下载

 从后端获取如上图的svg图片路径:imgUrl;图片信息:iconMsg

主要思路:

1、将svg转换成svg+xml的base64

2、根据svg+xml的base64创建canvas

3、根据创建的canvas转换成png的base64

getPngBase64(imgUrl, iconMsg) {
            const _this = this;
            window.URL = window.URL || window.webkitURL;
            const xhr = new XMLHttpRequest();
            xhr.open('get', imgUrl, true);
            // 至关重要
            xhr.responseType = 'blob';
            xhr.onload = function () {
                if (this.status === 200) {
                    // 得到一个blob对象
                    const blob = this.response;
                    // 至关重要
                    const oFileReader = new FileReader();
                    oFileReader.onloadend = function (e) {
                        // 此处拿到的已经是 base64的图片了
                        const base64 = e.target.result;
                        // 创建图片容器
                        const img = new Image();
                        // imageBase64 为svg+xml的Base64 文件流
                        img.src = base64;
                        img.onload = () => {
                            // 获取图片大小
                            const width = img.width;
                            const height = img.height;
                            // 图片创建后再执行,转Base64过程
                            const canvas = document.createElement('canvas');
                            // 设置好 宽高  不然图片 不完整
                            canvas.width = width;
                            canvas.height = height;
                            const context = canvas.getContext('2d');
                            context.drawImage(img, 0, 0);
                            const ImgBase64 = canvas.toDataURL('image/png');
                            _this.basePng = ImgBase64;
                            _this.downloadPngFile(_this.basePng, iconMsg.name);
                            // ImgBase64 为转换后的 png ImgBase64 文件流
                        };
                    };
                    oFileReader.readAsDataURL(blob);
                }
            };
            xhr.send();
        },

4、下载

downloadPngFile(url, name) {
            const a = document.createElement('a');
            a.setAttribute('href', url);
            a.setAttribute('download', name);
            a.setAttribute('target', '_blank');
            const clickEvent = document.createEvent('MouseEvents');
            clickEvent.initEvent('click', true, true);
            a.dispatchEvent(clickEvent);
        },

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值