商会资讯

 找回密码
 立即注册

QQ登录

只需一步,快速开始

用新浪微博连接

一步搞定

搜索
热搜: 活动 交友 discuz
查看: 6685|回复: 0
打印 上一主题 下一主题

D3.js 中实现svg 保存 png

[复制链接]

109

主题

1

好友

3774

积分

管理员

Rank: 9Rank: 9Rank: 9

  • ta_mind
    mb_qb7
    2013-3-19 01:56
  • classn_01: 366 classn_02

    [LV.9]以坛为家II

    跳转到指定楼层
    楼主
    发表于 2017-1-17 14:02:28 |只看该作者 |正序浏览

    [javascript] view plain copy

    • //svg 保存成Png  fuction  
    • function svgToPng(svg,pngWidth,pngHeight){  
    •     var serializer = new XMLSerializer();   
    •      var source = '<?xml version="1.0" standalone="no"?>\r\n'+serializer.serializeToString(svg.node());   
    •      var image = new Image;   
    •         image.src = "data:image/svg+xml;charset=utf-8," + encodeURIComponent(source);   
    •      var canvas = document.createElement("canvas");   
    •          canvas.width = pngWidth;   
    •          canvas.height = pngHeight;   
    •      var context = canvas.getContext("2d");   
    •         context.fillStyle = '#fff';//设置保存后的PNG 是白色的  
    •         context.fillRect(0,0,10000,10000);  
    •         context.drawImage(image, 0, 0);   
    •      return canvas.toDataURL("image/png");   
    • }  

    使用方法:[javascript] view plain copy

    • $('#imgSave').click(function(){  
    •               var url=<span style="color:#FF0000;">svgToPng(svg,width,height);</span>  
    •               var pngName="svgtoPng图";  
    •               var a = document.createElement("a");   
    •                      a.download = pngName+".png";   
    •                      a.href = url;   
    •                      a.click();  
    •       })  


    参数介绍:svg 是D3 创建的,代码如下:
    [javascript] view plain copy

    • var svg = d3.select("#jftp").append("svg")  
    •                    .attr("width", width)  
    •                    .attr("height",height);  


    width,height   根据需求设置[javascript] view plain copy

    • var width = $(document).width()-20;  
    • var height = $(document).height()-108;  


    问题总结:

    下载后 图片这种情况:原因是
    [javascript] view plain copy

    • linkEnter.append("path")  
    •        //  .attr("class", "link")//  使用了css 控制了连线格式 而 这种控制 在导出图片时,不能控制样式  
    •     //setting the styles through CSS. This doesn't generally work well with rendering to PNG;   
    •         .attr("style", "fill: none; stroke-opacity: 1;stroke-width: 1.5px;")//正确方法应该是 直接css在代码中控制。  
    •           .attr("d", function(d) {  
    •                 var o = {x: data.x0, y: data.y0};  
    •                  return diagonal({source: o, target: o});  
    •                  })  
    •           .transition()  
    •           .duration(500)  
    •           .attr("d", diagonal);  



    分享到: QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
    分享分享0 收藏收藏0 转发到微博
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    回顶部