js实现svg图形转存为图片下载[转]

我们知道canvas画布可以很方便的js原生支持转为图片格式并下载,但是svg矢量图形则并没有这方面原生的支持。
研究过HighChart的svg图形的图片下载机制,其实现原理大体是浏览器端收集SVG代码信息,并发送到到服务器端,由后端程序转换成图片格式后,以流的形式反射给浏览器端下载。

最近在项目中有需求将一个非HighChart的SVG地图转存为图片并下载的功能。
本希望模拟HighChart的原理实现,可是研究发现,该地图的SVG代码信息多达两万字节,然而HighChart后端制图程序却有着字节数限制,所以就不能这么处理了。

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

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

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

<div class="svg-wrap">
  <svg>...</svg>
</div>

然后,我们就可以通过如下代码来将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://来源地址已忘记,国外社区找到的
时间: 2024-10-22 03:09:49

js实现svg图形转存为图片下载[转]的相关文章

使用html2canvas js 截取网页图片下载

1.前台使用html2canvas js 截取Div元素转存为图片,下载.效果: 2.前台代码 <!DOCTYPE html><html><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>    <title></title>    <meta charset="utf-8"

Html5添加块级元素转换为不同形状的SVG图形的jquery插件教程

一.使用方法 使用该SVG图形jQuery插件要引入jQuery和shapeshifter.js文件. <script src="jquery.min.js"></script> <script src="scripts/shapeshifter.js"></script> 二.初始化插件 可以在任何一个<div>元素上调用该SVG图形插件.(最好是在<div>元素元素上使用该插件). $('S

html5轻量级操纵和制作SVG动画的js库-svg.js

svg.js是一个轻量级的操纵和制作SVG动画的js插件库.svg.js可以生成SVG图形.图像.文字和路径等等.svg.js还可以用于制作svg动画和互动拖拽等效果. svg.js不依赖与jQuery等外部插件库,它遵循麻省理工学院的许可( MIT License)下许可证的条款. 在线演示:http://www.htmleaf.com/Demo/201501301302.html 下载地址:http://www.htmleaf.com/html5/SVG/201501301301.html

JS如何导出Div的内容为图片

最近因为项目需要,研究了几天用js导出页面上的div为图片.项目需求是这样的,一个页面上有统计图和统计表,另外一部分是地图,当用户点击导出报告时,需要将页面内容导出到Excel,统计表可以从后台查出列表,然后以表格形式导出:统计通采用的echarts,可以转换为base64编码,然后后台处理之后导出.但是地图这块就有点难了,首先地图不是一张图片,其次地图的图片不在本地,所以虽然我自己的功能没实现,但是研究出了div导出为图片,需要的就拿走. div导出为图片,并不是直接完成的,原理可以认为截取屏

SVG图形的简单修改

svg格式的图片是一种矢量图片,最近我就喜欢使用这种图片在做html的元素.网上也有很多现成的svg图片,比如:http://www.sfont.cn这个网站,就能很快的找到各种您想要的图片.但是下载下来以后,发现想你要在html中用的样式和您下载的样式有区别,比如要修改一下方向和颜色. fill='green'是用来填充颜色的(更改颜色): transform="rotate(-135 500 500)"是用来旋转svg图形的 修改颜色的好说,放在对应的标签中即可.但是旋转需要放在s

svg保存为图片下载到本地

今天给大家说一个将svg下载到本地图片的方法,这里我不得不吐槽一下,为啥博客园不可以直接上传本地文件给大家用来直接下载分享呢,好,吐槽到此为止! 这里需要用到一个js文件,名字自己起,内容如下: (function() { const out$ = typeof exports != 'undefined' && exports || typeof define != 'undefined' && {} || this || window; if (typeof defin

原生js实现tab选项卡里内嵌图片滚动特效代码

<!DOCTYPE HTML><html lang="en-US"><head><meta charset="UTF-8"><title>原生js实现tab选项卡里内嵌图片滚动特效代码</title><meta name="keywords" content="原生js实现tab选项卡里内嵌图片滚动特效代码" /><meta name=&

js 动态修改属性值 动态修改图片,字等

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"   http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html> <head> <meta http-equiv = "content-type" content="text/html;charset=utf-8"/> &

一款在论坛上看到的JS封装的随机过渡方式的图片切换效果

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-