关于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() 方法

http://www.w3school.com.cn/tags/canvas_drawimage.asp

         onload事件不同浏览器总结

http://www.w3help.org/zh-cn/causes/SD9022

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值