admin 发表于 2017-1-17 14:02:28

D3.js 中实现svg 保存 png


view plain copy https://code.csdn.net/assets/CODE_ico.pnghttps://code.csdn.net/assets/ico_fork.svg


[*]//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");   
[*] }  

使用方法: view plain copy https://code.csdn.net/assets/CODE_ico.pnghttps://code.csdn.net/assets/ico_fork.svg


[*]$('#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 创建的,代码如下:
view plain copy https://code.csdn.net/assets/CODE_ico.pnghttps://code.csdn.net/assets/ico_fork.svg


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


width,height   根据需求设置 view plain copy https://code.csdn.net/assets/CODE_ico.pnghttps://code.csdn.net/assets/ico_fork.svg


[*]var width = $(document).width()-20;  
[*]var height = $(document).height()-108;  


问题总结:http://img.blog.csdn.net/20161212105315626?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQveHgxMjM2OTg=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center
下载后 图片这种情况:原因是
view plain copy https://code.csdn.net/assets/CODE_ico.pnghttps://code.csdn.net/assets/ico_fork.svg


[*]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);  



页: [1]
查看完整版本: D3.js 中实现svg 保存 png