html5svg在线编辑器,SVG to Canvas在线转换工具

https://github.com/samsha/svg2canvas

58fcdbcec4cfcdbecf13437c1793995e.png

canvg.js

是的确实有人在做这样的事,canvg.js 就是一个将SVG转换成Canvas的工具库,甚至有些SVG的动画效果也能得到实现,但是canvg.js存在很多问题:

不可避免的SVG兼容问题

SVG是一种很复杂的矢量图形语言,完全转换到Canvas相当于写一个独立的SVG查看器,即使是Adobe的SVG Viewer也会存在兼容问题,更何况一个小小的js工具库

canvg.js无法生成Canvas绘制代码

canvg.js确实能将SVG绘制到Canvas上,但是无法生成绘制代码,就意味着需要引入这个类库,且动态解析SVG,这里存在额外的性能开销,加上canvg.js本身并不完善,代码封装性还是功能上都存在缺陷,在生产环境中引入会带来问题

professorcloud

网上搜索svg to canvas,可以找到这个:http://www.professorcloud.com/svg-to-canvas/可以将SVG转换成Canvas,并输出javascript代码,符合制作矢量图标的需要,Qunee早期的内置icon都是这样制作的,但是这个工具并不完善,不支持渐变,不支持纹理,大部分的SVG图标无法转换,于是我们考虑自己写一个在线工具,以方便客户使用,我们查看了http://www.professorcloud.com/svg-to-canvas/ 的代码,它是在某个老版本的canvg.js基础上修改实现的,是写死的代码,不方便后期升级和维护,我们想到一种更好的方式来实现

SVG2Canvas

我们想到一种更好的方式实现SVG到Canvas代码的转换,在线地址:http://demo.qunee.com/svg2canvas/

实现思路

通过重写HTMLCanvasElement相关的方法来实现,基本的思路就是将CanvasRenderingContext2D.prototype中的相关绘制和设置代码重写,增加上生产js代码的功能,比如对CanvasRenderingContext2D#fill()方法的处理,我们可能要重写这个方法

CanvasRenderingContext2D.prototype.fill2 = function(){

this.fill();

appendCode('ctx.fill();\n');//生成js代码

}

当然实际上要比这复杂,需要考虑如何重写方法?如何将参数对象转换成字符串?此外对于复杂的SVG,可能会需要创建临时的Canvas对象,还涉及到一些正则表达式,还要注意作用域的问题,花费了些功夫,实现了一套不错的工具,基本上canvg.js能支持的svg,都能很好的转换,支持Gradient, 支持Pattern等

在线服务

好的东西如果只是自己使用,未免太浪费了,于是我们又花了不少时间将其做出了一个好的界面,并公布出来

在线地址:http://demo.qunee.com/svg2canvas/

支持Chrome, Safari浏览器,左中右布局分布,将svg文件拖拽到左侧虚线框中,即可生成Qunee for HTML5中相应的图片注册代码,并及时预览到图片在Qunee for HTML5中的展示效果,如下:

64a3d884b1402b4b17924e7f7078f2bb.png

使用生成的代码

将右侧文本框中的代码保存到js文件(比如SVGIcons.js),并在HTML中引入这个js,之后你就可以直接使用svg文件名作为节点图标了

node.image = 'DataCenter.svg';

示例代码

Hello Qunee for HTML5

var graph = new Q.Graph('canvas');

var node = graph.createNode("SVG");

node.image = 'DataCenter.svg';

运行效果

03166fdf433366ac10a73471e8ba6a72.png]]>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/563386.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python3 上传文件到目标机器_通过python模块实现服务器和本地机器之间快速拷贝文件...

在实际的开发过程中,很多时候我们都不直接在本机上开发,一般都在远程服务器上开发并运行程序。比如三胖在实际开发中就会使用到很多台服务器:我有一台笔记本电脑,通过 ssh 连接着很多台服务器,我需要经常在不同的服务器…

鸿蒙系统有那些上市,鸿蒙上市整套系统究竟意味着什么

大家期待的鸿蒙系统已经上市,首先鸿蒙系统从自家的生态产品适配,大家熟知的华为笔记本,华为手机,华为平板,华为手表等,相比目前市场上的操作系统,IOS,安卓,微软Windows&a…

c# 时间格式化为英文_C# DateTime日期格式化

1. 分类DateTime调用ToString()传入的参数可分为制式和自定义两种:1) 制式:系统自带的,转入特定的单个字符就可转换为系统已设定好的格式。2) 自定义:自由组合日期代码(y、M、d、h、m、s、f)来展示丰富的日期格式。2. 制式类型说明…

html多个单元格合并单元格内容,excel怎样快速把多个单元格内容合并 合并多个单元格内容的设置方法...

excel是我们常用的办公软件,有时我们需要把多个单元个的内容合并到一个单元格里,那么excel怎样快速把多个单元格内容合并?下面小编带来合并多个单元格内容的设置方法,希望对大家有所帮助。合并多个单元格内容的设置方法&#xff1…

mysql5.5客户端_MySQL 5.5/5.6——概述 MySQL 客户端程序

本文内容 mysqlmysqladminmysqlcheckmysqldumpmysqlimportmysqlshowmysqlslap参考资料mysqlmysql 是一个可以输入行的 SQL 外壳,输入行可以编辑。它支持交互和非交互。当使用交互式,查询结果以一个 ASCII 表格式来显示。当使用非交互时(例如,…

第一次使用mysql_第一次使用mysql,求帮忙

我用的是navicate,怎么把里面的数据库备份出来放到另外一个服务器里面啊,那个里面也装的是navicate回复讨论(解决方案)没用过navicate,它是一个图形化工具,应该有导入导出的按钮,找找看。没用过navicate,它是一个图形化…

mac 如何配置mysql_MAC下安装与配置MySQL

一 下载MySQL访问MySQL的官网http://www.mysql.com/downloads/ 然后在页面中会看到“MySQL Community Server”下方有一个“download”点击。进入MySQL的下载界面(http://www.mysql.com/downloads/mysql/),如果你是用的Mac OS来访问的话那么就会默认为你选好了Mac O…

计算机专硕专业课难度,计算机考研:20考研的408难度如何?

原标题:计算机考研:20考研的408难度如何?2020年对于计算机考研来说风云突变的一年,去年夏天“专业课改考”一度成为计算机考研小伙伴们之间的热词。不少院校或改变、或增加专业课科目,借此提高专业课难度,增…

barrons ap计算机科学,巴朗ap心理学barrons ap psychology, 5th edition-201-240.pdf

巴朗ap心理学barrons ap psychology, 5th edition-201-240.pdf (C)Arousaltheorydescribesmotivationbyreferringtostagesinourresponsestostress(thegeneraladaptationsyndrome).Achievementmotivationisnotusedtodescribemotivationduetostress.(D)Apersonwithalowoptimumlev…

递归算法1加到100_五种循环方法计算1加到100

上文讲过1加到100,详细解释了计算的过程&#xff0c;如果理解了以前的文章&#xff0c;就容易理解今天的内容了。1加到100使用VBA我能使用十来种方法&#xff0c;以下也是一种方法。While ……wend循环 Private Sub CommandButton1_Click()s 0i 1While i < 100s s ii …

武汉大学计算机学院参考书目,2020武汉大学计算机与软件工程考研初试科目、参考书目及复试详情...

原标题&#xff1a;2020武汉大学计算机与软件工程考研初试科目、参考书目及复试详情本文将由新祥旭徐老师全方位的对武汉大学计算机专业考研进行解析&#xff0c;主要有以下几个板块&#xff1a;学院介绍&#xff0c;专业情况介绍&#xff0c;2019录取情况分析&#xff0c;考研…

培训学校计算机助教是干嘛的,【助教】的意思是什么?【助教】是什么意思?...

【助教】的意思是什么&#xff1f;【助教】是什么意思&#xff1f;以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;【助教】的意思是什么&#xff1f;【助教】是什么意思&#xff1f; 【助教…

云服务器怎么管理,第一次使用云服务器,如何使用和管理云服务器

云服务器的两节课和管理使用其实非常简单,windows 自带了一个远程桌面的软件,利用这个远程桌面,我们可以很轻松容易的管理远在天边的服务器,就和您亲自做在远程服务器的电脑前一样!现在我们看看如何使用他吧!在开始 - 程序 - 附件 - 远程桌面 ,如图:如在附件里面找不到这个 远程…

163邮箱有传真服务器,网易企业邮箱邮件传真功能使用说明

网易企业邮箱邮件传真功能是网易在用户购买网易企业邮箱时附赠的增值服务&#xff0c;管理员通过在企业邮箱管理后台给员工邮箱设置邮件传真号码&#xff0c;员工便可在WebMail直接收发电子传真&#xff0c;无需通过传真机。此功能需要联系经销商协助开通。一、管理员端如何开通…

ajax 折叠,ASP.NET AJAX可折叠面板Accordion应用实例

通常来讲&#xff0c;将一个无比长的列表直接显示给用户是一种极不礼貌的行为。对此&#xff0c;解决方案有很多&#xff0c;归类显示就是其中之一。类似我们常见的QQ或MSNMessage的联系人归类等&#xff0c;系统将用户管理中心的操作菜单归类显示&#xff0c;并应用背景图片&a…

navicat mysql 建表语句_Navicat for MySQL怎么/如何创建数据表?Navicat for MySQL创建数据表教程_斗蟹游戏网...

【斗蟹攻略】Navicat for MySQL是针对MySQL数据库管理而研发的管理工具&#xff0c;创建数据表是其最基本操作&#xff0c;下面就由斗蟹小编介绍Navicat for MySQL创建数据表的方法。Navicat for MySQL创建数据表教程步骤一&#xff1a;新建连接运行Navicat数据库管理工具&…

华为服务器显示003,设置BIOS - RH2288H V3 服务器 V100R003 用户指南 41 - 华为

在服务器的远程虚拟控制台的菜单栏中&#xff0c;单击。关于登录远程虚拟控制台的详细操作步骤&#xff0c;请参见登录远程虚拟控制台。选择“重启”。弹出“你确认要执行这个操作吗&#xff1f;”提示框。单击“是”。服务器进行重启。服务器重启时&#xff0c;当出现如下界面…

java前端开发_Java前端开发学习什么内容

Java是一门高级编程语言&#xff0c;现在java工程师需求很大&#xff0c;所以java的前景很好&#xff0c;有些朋友往java前端开发方向发展&#xff0c;那么&#xff0c;Java前端开发学习什么内容呢?动力节点java学院小编来告诉你。就目前市场行情来看&#xff0c;Java最流行的…

用友t3显示无法解析服务器名称,用友T3软件进入用友通提示不能解析端口,不能登录服务器...

用友软件增加明细科目时提示新增会计科目是&#xff0c;提示上级科目已经使用&#xff0c;新增科目将自动改为上级科目的设置已经使用的科目如何增加明细科目在软件操作过程中&#xff0c;经常会遇到对已经使用的科目&#xff0c;要求增加其明细科目的问题。科目已经使用&#…

java 类 解析_Java集合类解析 ***

collection集合Map集合Hashtable和HashMap的区别&#xff1a;Hashtable的方法是同步的&#xff0c;而HashMap的方法不是。HashMap可以将空值作为一个表的条目的key或value。Collection接口Collection接口是List、Set和Queue接口的父接口&#xff0c;该接口里定义的方法既可用于…