关于d3生成图片的一些实例

编程入门 行业动态 更新时间:2024-10-06 16:27:21

关于d3生成图片的一些<a href=https://www.elefans.com/category/jswz/34/1771375.html style=实例"/>

关于d3生成图片的一些实例

最近项目需要,正好多看了一下,下面就是一些记录,日积月累第一次。。。

1.需求

为了生成关系图谱,选择力导向图(force),在D3.js和echarts.js中选择了D3.js(没有对比过)来实现力导向图。

       利用D3.js将数据捆绑起来,在前台div中生成svg(D3.js也可以生成canvas

       此时需要把关系图谱也生成在pdf中,所以把图谱(tupu.html())保存成图片(var img = new Image();),创建一个canvas(createElement('canvas'))将图谱生成的图片放入canvas中(context.drawImage(img,0, 0);),转成url流传到后台(canvas.toDataURL('image/png')),并生成图片,放入pdf中。

2.代码

下面是完整生成图片流的代码:

var tupu =$("#company_tupu").contents().find("#container");//定位到svg位置

              var svgXml= tupu.html();

              var img = new Image();

              var imagesrc = 'data:image/svg+xml;base64,'+ window.btoa(unescape(encodeURIComponent(svgXml)));

              img.src = imagesrc;

              img.onload = function(){

                     var canvas =document.createElement('canvas');  //准备空画布

                     canvas.width =tupu.width();

                     canvas.height =tupu.height();

                     varcontext = canvas.getContext('2d');  //取得画布的2d绘图上下文

                     context.drawImage(img, 0,0);

                     var tupuUrl =canvas.toDataURL('image/png');

              };

3.问题\困难

Bug:

1.       最开始时,选择利用window.location.reload()重新刷新页面,再用img.οnlοad=function(){},来生成canvas。

  Q:此时chrom可以正常加载并生成图片但是firefox不正常。

  A: FF无法执行onload方法(原因还没彻底清除,猜测是某一个方法,覆盖了onload,倒是onload没有执行),导致图片不能生成

2.       经过修改,不用重新加载页面(因为关系图谱之前已生成,可以直接找到svg),并且没有用onload方法

  Q:此时,chrom正常,FF也可以正常下载,但是没有图片,图片是空白

  A:据分析,应该是img没有生成,在toDataURL之后才生成,加入onload方法,让图片加载完,再执行生成流的过程

3.       NS_ERROR_NOT_AVAILABLE未解决,猜测是因为img没有生成完

4.小提示

Tip:canvas drawImage() 方法

.asp

         onload事件不同浏览器总结

 

更多推荐

关于d3生成图片的一些实例

本文发布于:2024-02-13 10:21:56,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1758146.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:实例   图片

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!