d3画的图或者svg图转base64编码格式
来源:互联网 发布:js创建html表格 编辑:程序博客网 时间:2024/06/05 13:26
大家一定有这样的困扰,我用的svg画的图,怎么转成base64传到后台去呢,众所周知,d3.js就是基于svg
画出来的图,所以d3.js画的图就是svg格式的图,博主在工作中也遇到了这个问题,就是拿d3.js画出来的图
需要转成base64编码传到后台去,然后在后来导出word,经过两天的摸索和网上查阅各种资料,终于被我
找到一种方法,特别方便,不过要引入一个js,就是saveSvgAsPng.js
,这里给大家一个网址,大家可以
去下载,而且用法超简单,直接调用API就ok了,上传这个的哥们真是太良心啦
网址:https://github.com/exupero/saveSvgAsPng
好了废话不多说,下面开始讲如何讲d3.js(svg)转成base64的编码格式,众所周知,canvas有一个函数可
以直接转成base64的编码格式canvas.toDataURL()
,对,没错,就是这个函数,所以我们要先把svg的
图片转成canvas,用canvas画出来,就可以调用canvas的API来进行转换啦,下面上代码:
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title>Document</title> <style type="text/css"> .axis path,.axis line{ fill:none; stroke:black; shape-rendering:crispEdges; } .axis text{ font-family:sans-serif; font-size:11px; } .node circle { fill: steelblue; /*stroke: steelblue; */ stroke-width: 1.5px; } .node { font: 12px sans-serif; } .link { fill: none; stroke: #ccc; stroke-width: 1.5px; } </style></head><body> <div class="svg-wrap"></div> <button id = "btn">保存图片</button> <script type="text/javascript" src = "http://d3js.org/d3.v3.min.js" charset = "utf-8"></script> <script type="text/javascript" src = "js/saveSvgAsPng.js" charset = "utf-8"></script> <script type="text/javascript"> var width = 600; var height = 600; var svg = d3.select(".svg-wrap") .append("svg") .style("background-color","yellow") .attr("width",width) .attr("height",height) //转换数据 var tree = d3.layout.tree() .size([width,height - 200]) .separation(function(a,b){ return (a.parent == b.parent ? 1 : 2); }); //绘制 var diagonal = d3.svg.diagonal() .projection(function(d){ return [d.y,d.x]; }) d3.json("value.json",function(error,root){ var nodes = tree.nodes(root) var links = tree.links(nodes) console.log(nodes); console.log(links); var link = svg.selectAll(".link") .data(links) .enter() .append("path") .attr("class","link") .attr("d",diagonal) .attr("transform","translate(60,0)") var node = svg.selectAll(".node") .data(nodes) .enter() .append("g") .attr("class","node") .attr("transform",function(d){ return "translate(" + (d.y+60) + "," + d.x +")" }) node.append("circle") .attr("r",20) .attr("fill","steelblue") node.append("text") .attr("dx",function(d){ return d.children ? 12 : -10; }) .attr("dy",35) .style("text-anchor",function(d){ return d.children ? "end" :"start"; }) .text(function(d){ return d.name; }) ///////////////////////////////////////////// //saveSvgAsPng(document.querySelector("svg"), "diagram.png"); document.getElementById("btn").onclick = function(){ saveSvgAsPng(document.querySelector("svg"), "diagram.png");//保存成图片 } svgAsDataUri(document.querySelector(".svg-wrap svg"), {}, function(uri) {//转换成base64编码 var img = new Image() img.src = uri; console.log(uri); var canvas = document.createElement('canvas'); canvas.width = width; canvas.height = height; var content = canvas.getContext('2d'); img.onload = function(){ content.drawImage(img,0,0); console.log(canvas.toDataURL()); } }); }) </script></body></html>
运行结果如下:
其中点击保存图片,会调用saveSvgAsPng(document.querySelector("svg"), "diagram.png");
保存成png格式图片
而且真的是png图片哦,下面看保存效果,我拿看图王打开的
调用:
svgAsDataUri(document.querySelector(".svg-wrap svg"), {}, function(uri) {//转换成base64编码
var img = new Image()
img.src = uri;
console.log(uri);
var canvas = document.createElement('canvas');
canvas.width = width;
canvas.height = height;
var content = canvas.getContext('2d');
img.onload = function(){
content.drawImage(img,0,0);
console.log(canvas.toDataURL());
}
});
就可以在控制台打印出base64的图片编码格式的了
这个是控制台打印出来的,到时候就可以把这个base64编码传到后台去就ok了,是不是特别方便呢!
- d3画的图或者svg图转base64编码格式
- 编码格式转换--base64 格式的解码和编码
- Base64编码格式 和 String的转换
- 用d3.js实现基于SVG的线形图
- D3-SVG 画布完整的柱形图
- SVG Path与d3下的 Path
- d3.js-svg的效果及样式
- 可以作为URL传输的BASE64编码格式的数据
- d3导出svg图片
- 关于Base64编码的
- 奇妙的Base64编码
- base64编码的代码!
- base64编码的用处~
- 奇妙的Base64编码
- 字符串的编码Base64
- 奇妙的Base64编码
- j2me的Base64编码
- Base64编码的来龙去脉
- C#复选框全选按钮制作
- 设计模式之单例模式
- 自旋锁、排队自旋锁、MCS锁、CLH锁
- 几种常见分布
- js target和currentTarget
- d3画的图或者svg图转base64编码格式
- 如何正确的下载和配置opencv和opencv_contrib
- shiro判定无权限后跳转页面失效
- CSDN-markdown编辑器
- js toFixed问题
- 贪心算法区间不相交问题
- Visual Studio Code 自定义Snippet配置
- 一 线性表的有关操作
- Linux守护进程Shell脚本