svg图转canvas,完全阔以的
遇到的问题:页面中存在svg画的图,也存在canvas图,在用 html2canvas 截取页面的图就导致有图画缺失,至少我需要的缺失了。
一、如果页面单纯的存在一个svg画的图,转为canvas就很好考虑,就是将svg的图画代码转为字符串,去空格,然后用canvg.js的方法,
canvg("canvasId","svgHTML")转化,其中canvasId这个对象是你页面的canvas容器(你也可以动态生成它),svgHTML是你拿到的svg 图画的字符串。示例如下:
<div id="container" style="min-width:700px;height:400px">
<svg>
<line x1="0" y1="10" x2="0" y2="100" style="stroke:#006600;"/>
<line x1="10" y1="10" x2="100" y2="100" style="stroke:#006600;"/>
<line x1="20" y1="10" x2="100" y2="50" style="stroke:#006600;"/>
<line x1="30" y1="10" x2="110" y2="10" style="stroke:#006600;"/>
</svg>
</div>
<input type="button" value="svg转为canvas" onClick="change()" />
<canvas id="canvasId" ></canvas> <script src="js/canvg.js"></script>
<script type="text/javascript">
function change(){
var svgHtml=document.getElementById("container").innerHTML.trim();
var canvasId=document.getElementById("canvasId");
canvg(canvasId,svgHtml);
}
</script>
二、当然实际项目中真正需要去转化的图应该不会那么简单,一个大的容器中可能有很多层的svg、canvas,这时候就需要在控制台仔细的看需要去转化的那部分图具体在哪个层级结构,然后把它拿到,再用上面的方法转换。
注意:
- 转换时需要注意canvas容器的父级div的z-index值(用个div将canvas包裹下,比较方便),以免生成后被其他图遮盖。
- 可能会遇到一个问题,就是你svg图画的字符串拿到了,也用canvg转化好了,在你转换成功后,图也能在页面完全显示,但是但是导出或下载的图片上可能仍然没有显示你转化的那部分。 这问题也许是在导出或者下载时导致的,具体原因我目前木有找,哪位童鞋清楚的请多多赐教。这个问题的解决方法就是,你需要去找具体是页面中哪个图在下载的时候将你生成的canvas 遮挡了,然后去更改那个图的opacity。改到不影响彼此的效果即可。
最新版canvg.js 下载 点我 上文对你有帮助的话请来个推荐,谢谢
svg图转canvas,完全阔以的的更多相关文章
- 多个SVG图形集成到一个SVG图形上
SVG:使用XML格式定义图像的可缩放矢量图形(Scalable Vector Graphics). 优点就不多说了,下面看看怎么将多个svg图形集成到一个svg图形上. 如果使用bootstrap框 ...
- svg转化成canvas以便生成base64位的图片
很久前写了关于把html转成图片的一个例子,最近有出了新的问题.利用html2canvas.js文件把html转成base64位的图片是没什么问题的,但也不是绝对的,比如这时候不能碰见svg这个鬼,h ...
- 绘制SVG内容到Canvas的HTML5应用
SVG与Canvas是HTML5上绘制图形应用的两种完全不同模式的技术,两种绘制图形方式各有优缺点,但两者并非水火不容,尤其是SVG内容可直接绘制在Canvas上的功能,使得两者可以完美的融合在一起, ...
- 使用d3.v3插件绘制出svg图
众所周知,这个插件使用的svg技术,而IE8(包括IE8)之前的浏览器是不支持svg的 接下来看代码吧 从后台获取到带id和父id的目录数据[json格式] var module = requestU ...
- Android 使用WebView控件展示SVG图
1.添加布局界面代码: <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xm ...
- Canvas 画占比图 解决canvas锯齿 bug
案例如图: <section class=" chartWrap"> <div class="chartContent"> <di ...
- js多张图片合成一张图,canvas(海报图,将二维码和背景图合并) -----vue
思路:vue中图片合并 首先准备好要合并的背景图,和请求后得到的二维码, canvas画图,将两张背景图和一张二维码用canvas画出来, 将canvas再转为img 注意canvas和图片的清晰图和 ...
- echarts地图扩展___自定义的svg图
echarts的自定义地图 标签引入js文件 <script type="text/javascript" src="echarts/require.js" ...
- 使用Batik绘制SVG图并保存为png图像格式
SVG(Scalable Vector Graph)--可缩放矢量图形. 可缩放矢量图形是基于可扩展标记语言(标准通用标记语言的子集),用于描写叙述二维矢量图形的一种图形格式.它由万维网联盟制定.是一 ...
随机推荐
- 6-EasyNetQ之订阅
一个EasyNetQ订阅者订阅一种消息类型(消息类为.NET 类型).通过调用Subcribe方法一旦对一个类型设置了订阅,一个持久化队列就会在RabbitMQ broker上被创建,这个类型的任何消 ...
- ie6下会拒绝高度小于字号的设置
<div style="height: 5px;background-color: yellow">wojitianhenkaixin</div> 此时浏览 ...
- 第4章 ZK基本特性与基于Linux的ZK客户端命令行学习 4-2 session的基本原理与create命令的使用
客户端与服务端之间存在的连接,那么这样的一个连接我们就称之为会话,也就是session.其实就相当于是我们在做JSP或者说是Service的时候,那么服务端是Servlet,客户端使用的是浏览器.浏览 ...
- ES02 变量、数组、对象、方法
1 变量 1.1 变量的声明 利用var关键字来声明变量,例如: var a = 100; <!DOCTYPE html> <html> <head> <me ...
- 解析IFC数据并转成json格式
{ "com.bim.ifc.ifc2x3.ifc2x3tc1.IfcBuilding (#104)-": [{ "objKey": "GlobalI ...
- linux中的管道命令
很有用的一个命令,用法如下: A | B 是把A命令的输出作为B命令的输入. 比如我想查看一下我在终端输入过的命令,可以这样: history | less
- Joda Time 使用
Joda Time 使用 对于系统的一些时间操作很是不方便,为了方便转化,有时候用date,有时候用timestmp,有时候用calendar,忍不住想更改了. 但是任务巨大,先把笔记收藏了,后面有机 ...
- 输入框获取焦点后placeholder文字消失、修改placeholder的样式
输入框获取焦点后placeholder文字消失: <input placeholder='' onfocus="this.placeholder=''" onblur=&qu ...
- markdown编辑器使用教程
网上的资料很多,我收集整理学习下. 我是下划线 *** 我是标题 我也是标题 ewq着重ewqe 列表1 列表2 我也是 我也是 有序列表 有序列表 //我是代码 int x=0; int y=x; ...
- SuperSocket1.6电子书离线版
使用离线浏览器制作,格式为chm,本人不对电子书内容具有任何权利!简体中文,适用于.NET开发. 下载地址