博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
js实现svg图形转存为图片下载[转]
阅读量:6439 次
发布时间:2019-06-23

本文共 1047 字,大约阅读时间需要 3 分钟。

我们知道canvas画布可以很方便的原生支持转为图片格式并下载,但是svg矢量图形则并没有这方面原生的支持。

研究过HighChart的svg图形的图片下载机制,其实现原理大体是浏览器端收集SVG代码信息,并发送到到服务器端,由后端程序转换成图片格式后,以流的形式反射给浏览器端下载。

最近在项目中有需求将一个非HighChart的SVG地图转存为图片并下载的功能。

本希望模拟HighChart的原理实现,可是研究发现,该地图的SVG代码信息多达两万字节,然而HighChart后端制图程序却有着字节数限制,所以就不能这么处理了。

然后国外社区讨论的方法也多是前后端协同处理来完成这个功能的,这样实现会比较重, 而且部署不便。

经过一番搜寻,终于发现一个不依赖任何外部库,框架,同时仅仅通过浏览器端js便能实现的方法。 代码实现的具体来源地址已经忘记了, 这里保留代码原创作者的版权哈。

首先,我们约定SVG的上下文结构是如下的:

...

然后,我们就可以通过如下代码来将svg图形转为图片并下载了:

var svgXml = $('.svg-wrap').html();var image = new Image(); image.src = 'data:image/svg+xml;base64,' + window.btoa(unescape(encodeURIComponent(svgXml))); //给图片对象写入base64编码的svg流 var canvas = document.createElement('canvas'); //准备空画布 canvas.width = $('.svg-wrap svg').width(); canvas.height = $('.svg-wrap svg').height(); var context = canvas.getContext('2d'); //取得画布的2d绘图上下文 context.drawImage(image, 0, 0); var a = document.createElement('a'); a.href = canvas.toDataURL('image/png'); //将画布内的信息导出为png图片数据 a.download = "MapByMathArtSys"; //设定下载名称 a.click(); //点击触发下载 原文地址:

转载地址:http://nlzwo.baihongyu.com/

你可能感兴趣的文章
WPF模糊和阴影效果
查看>>
增加关系型数据库驱动配置同步任务
查看>>
别用这种方式聊天,你都不知道自己是怎么聊死的
查看>>
中国香港地区 DDoS- botnet 态势分析
查看>>
另一个角度的架构师
查看>>
SparseArray<E>详解
查看>>
Eclipse-Java代码规范和质量检查插件-PMD
查看>>
阿里专家分享:企业级大数据轻量云实践
查看>>
阿里财报:云计算年度营收133亿,季度营收连续12个季度翻番
查看>>
人工智能化发展已经到了哪一步?
查看>>
php实现上传图片保存到数据库的方法
查看>>
安卓应用安全指南 5.4.3 通过 HTTPS 的通信 高级话题
查看>>
针对CMS中的tag标签理解
查看>>
AR头显要上天!欧洲太空总署或用HoloLens维修太空站
查看>>
沃尔玛建立自家的人工智能网络,抗衡竞争对手亚马逊
查看>>
Mysql备份与还原及优化方法
查看>>
linux常用命令和选项
查看>>
sed 学习笔记(未完成)
查看>>
Eclipse保存验证JS缓慢
查看>>
2017 JMP Discovery Summit China圆满落幕
查看>>