svg转换canvas的canvg插件使用详解

最近在使用svg和canvas绘制电信的网络拓扑图,遇到了一些困难。同时论坛中也有不少网友在提问类似的帖子。今天我就为大家推荐一些做法,主要借鉴和采用网上的一些开源框架进行开发!推荐一些框架,如:jtopo、D3.js、Qunee(收费)、GraphEditor、HT for Web、TWaver等。这些框架一部分使用的是svg,一部分使用的canvas。效果都差不多。性能方面暂时还没有进行测试。先看一下最终效果:

svg转换canvas的canvg插件使用详解

各大框架都有演示demo,我就不一一列举了。重点我说下canvg的使用。canvg是个SVG解析器和渲染器,把URL转换成SVG文件,或者是SVG文本文件。它使用Javascript解析,渲染出Canvas元素,渲染速度跟本地SVG一样。代码如下:

<!DOCTYPE HTML>
<html>
<body>
	<div id="svgTest">
		<svg width="100px" height="200px">
			<circle cx="100" cy="50" r="40" stroke="black" stroke-width="2" fill="red"/>
		</svg>
	</div>
	<canvas id="canvas" width="100px" height="200px"></canvas> 
	<script type="text/javascript">
		window.onload = function() {
		  canvg(document.getElementById('canvas'), document.getElementById('svgTest').innerHTML, { ignoreMouse: true, ignoreAnimation: true });
		  //参数1为:canvas对象
		  //参数2为:可以为svg文件(file.svg),也可以为svg的代码(document.getElementById('svgTest').innerHTML)
		  //参数3为:第三个参数是可选项,为一个对象,该对象的属性介绍如下:
				//log: true => 打印log信息
				//ignoreMouse: true => 忽略鼠标事件
				//ignoreAnimation: true => 忽略动画
				//ignoreDimensions: true => 不尝试调整画布
				//ignoreClear: true => 不清除画布
				//offsetX: int => 在×方向上的偏移量
				//offsetY: int => 在y方向上的偏移量
				//scaleWidth: int => 当前绘图的缩放宽度
				//scaleHeight: int => 当前绘图的缩放高度
				//renderCallback: function => 第一次渲染完成后将调用的回调函数
				//forceRedraw: function => 如果返回真,会在每个frame里调用这个函数,然后重绘
				//useCORS: true => 是否允许跨域,如果是,则尝试用跨域图片,这样可以不用污染canvas
		}
		//调用后,canvas将复制svg标签。使用canvg可以使canvas和svg相互转换。
	</script>
</body>
</html>

下面是记录一些使用canvg进行svg转成canvas遇到的错误

1.ERROR: Element 'parsererror' not yet implemented.

   这个错误是解析错误。一般是由canvg不支持的标签引起的。如:svg中使用<image height="64px" width="64px" y="-32px" x="-32px" xlink:href="4.png" class="circle" src="4.png"></image> 其中canvg不支持xlink:href="4.png",所以会报解析错误的异常。换成src之类的。

2.ERROR: Element 'image' not yet implemented.

   这个错误是说,目前还不支持image标签。 svg转换canvas的canvg插件使用详解

svg转换canvas的canvg插件使用详解

: » svg转换canvas的canvg插件使用详解

原创文章,作者:1402239773,如若转载,请注明出处:https://blog.ytso.com/251116.html

(0)
上一篇 2022年5月2日
下一篇 2022年5月2日

相关推荐

发表回复

登录后才能评论