SVG转图片 遇到的坑

开发过程中遇到一个 需求 将svg画的图谱保存成图片 ,查了很多资料,将解决办法和遇到的问题mark一下

保存图片的方法

let that = this;
let chart = document.getElementById(‘chart‘);
let svghtml = chart.innerHTML;

// let svg = document.querySelector(‘svg‘);
// let svghtml = svg.outerHTML;
// let svghtml = new XMLSerializer().serializeToString(svg);
let img = new Image();

let imgsrc = `data:image/svg+xml;base64,${window.btoa(unescape(encodeURIComponent(svghtml)))}`;//
// let imgsrc = `data:image/svg+xml;utf,${svghtml}`;//
img.onload = function () {
let canvas = document.createElement(‘canvas‘);
canvas.width = chart.offsetWidth;
canvas.height = chart.offsetHeight;
let context = canvas.getContext(‘2d‘);
context.drawImage(img, 0, 0);
let url = canvas.toDataURL(‘image/png‘);
let a = document.createElement(‘a‘);
// a.href = ‘./assets/imgs/company.png‘;
a.href = url;
a.download = that.corpname + ‘融资图谱.png‘;
a.click();
1

let chart = document.getElementById(‘chart‘);   

let svghtml = chart.innerHTML;
let imgsrc = `data:image/svg+xml;base64,${window.btoa(unescape(encodeURIComponent(svghtml)))}`;//
但是注意 svg标签要 加上xmlns http://www.w3.org/2000/svg的属性 要不然image会一直进error的方法如果svg中 包含了image 则也需要加上 属性 xmlns http://www.we.org/1999/xlink 

2
// let svg = document.querySelector(‘svg‘);
// let svghtml = svg.outerHTML;
// let svghtml = new XMLSerializer().serializeToString(svg);
3  但是如果你的svg中包含了image 标签 千万要注意 里面的src最好写上 要引用的图片的base64 地址,否则如果直接引用项目图片地址的话,最后下载的图片 原来svg中的image不会出现在图片中4  附上image转base64的方法
_img2base64 = (img) => {
    var canvas = document.createElement("canvas");
    canvas.width = img.width;
    canvas.height = img.height;
    var ctx = canvas.getContext("2d");
    ctx.drawImage(img, 0, 0, img.width, img.height);
    var dataURL = canvas.toDataURL("image/png");
    return dataURL;
}

5  获取base64正确姿势,一定是在img onload方法中获取,是异步获取

// let img = new Image();
      // img.src = ‘./assets/imgs/company.png‘;
      // img.onload = function () {
      //   img.width = 80;
      //   img.height = 80;
      //   document.body.appendChild(img)
      //   let url1 = that._img2base64(img);//  将获取的base64复制给svg的image属性
   // }

 ok 完事,希望能解决你的困惑

有问题 评论见

原文地址:https://www.cnblogs.com/lisiyang/p/11583563.html

时间: 2024-10-15 22:21:14

SVG转图片 遇到的坑的相关文章

png格式图片转为svg格式图片

png格式图片转为svg格式图片 (2012-08-30 16:24:00) 转载▼ 标签: 杂谈 分类: linux 在ubuntu下将png格式的图片转换成svg格式步骤如下:1.安装 inkscapesudo apt-get install inkscape2.安装 python-lxmlsudo apt-get install python-lxml3.使用 inkscape 打开png图像4.点中图像,选择命令 效果->图像->嵌入所有图像5.保存成svg格式

微信JS-SDK选择图片遇到的坑

微信JS-SDK选择图片遇到的坑 有个需求要在微信企业号里面做开发,有个功能是选择图片,使用input标签肯定是不管用了,Android手机上不能多选,所以使用了微信的JS-SDK提供的相关API,这个地方真的是有坑,记录一下.按照文档直接引入js文件即可,如果使用的是Vue,也可以使用weixin-js-sdk,两种方式都可以. 图片在Android上无法预览 js-sdk的chooseImage 接口返回的结果是localId,类似于wxLocalResource://xxxxxx,如果想得

从1500万用户巅峰跌落的app,血泪回顾图片社交那些坑

饭桌君说 第八届小饭桌创业课堂来了一位特殊的分享嘉宾,他曾经参与了一款当时极具风头的图片社交app的创始团队,靠谱团队,用户量急速上升到1500万,公司获得A轮……一切看上去都那么美好. 可是,由于各种错,各种坑,这款图片社交app即便获得了A轮投资,也最终走向了分崩离析.团队中各位同学再次扬帆起航,其核心产品经理作为小饭桌同学,深度剖析了当年的错和痛,这些血淋漓的经验教训,都是创业途中难能可贵的宝贵财富.与各位同学共勉! 团队情况: 2011年底,本来团队跟随LBS在做签到,后来发现签到是伪需

nodejs之SVG转图片下载方案

页面中有时用户需要保存或者下载显示的svg图,但是svg本身无法像图片一样"右键-图片另存为"这样保存,可以有多种方案,这里采用的是将svg转成图片再将其下载下来. 为实现这个方案,采用的是在node.js(若没有请到https://nodejs.org/ 下载安装)的基础上使用phantomJS提供第三方支持,phantomjs是一个支持DOM,canvas,svg等web标准提供本地支持的Webkit,详情请点击http://phantomjs.org/ ,下面以Fedora-ba

SVG格式图片转成HTML中SVG的Path路径

AI图标制作完成之后,保存的svg文件包含许多AI的信息,如果要在HTML中使用,我们需要在svg文件中提取/修改信息,重新保存. 1.在AI中已经完成图标,要保存SVG文件,点击"文件(File)"-"另存为(Save As)",在弹出的对话框中保存类型选择SVG(*.svg). 2.svg文件保存后,用文本编辑器打开,找到<path>这一个节点,d属性里面就是这个图片的路径数据[注:在保存svg图标的时候需要使用路径查找器工具将图标制作为复合路径,不

js-vue-swipe图片放大—踩坑

基于photoswipe实现的vue图片预览组件 安装 npm install vue-image-swipe -D 引用 import Vue from 'vue' import VueImageSwipe from 'vue-image-swipe' import 'vue-image-swipe/dist/vue-image-swipe.css' Vue.use(VueImageSwipe) 使用 <template> <div> hello world <div>

设置tableview的背景图片(被坑过)

[self.tableView setBackgroundView:bgImageView]; 坑死我 弄了好久

svg放图片

<svg width="118" height="42"> <image xlink:href="/Content/img/logo.svg" src="/Content/img/logo.png" width="118" height="42" /> </svg>

python程序展现图片遇到的坑

使用cv2展示图片的时候遇到了问题,提示:TypeError: Required argument 'mat' (pos 2) not found 给定的图片路径是没得问题的,代码如下: 使用opencv读取和显示图像 import cv2 image = cv2.imread(‘shaizi5.jpg’) cv2.imshow(image) 然后运行就报错了 经过查询资料发现: 仔细检查发现从cv2.imshow()函数有两个必要的参数,还有一个参数是图片窗口名字.加上参数运行结果正确,结果如