简体   繁体   English

修改svg后,使用javascript将svg转换为png

[英]convert svg to png using javascript after modification to svg

I have a svg that I am converting to png using below javascript code 我有一个SVG,我正在使用下面的JavaScript代码转换为PNG

$(".exportImageButton").on("click",function(){
  var svg = document.querySelector( "svg" );
  var svgData = new XMLSerializer().serializeToString( svg );
  var canvas = document.createElement( "canvas" );
  var svgSize = svg.getBoundingClientRect();
  canvas.width = svgSize.width * 3;
  canvas.height = svgSize.height * 3;
  canvas.style.width = svgSize.width;
  canvas.style.height = svgSize.height;
  var ctx = canvas.getContext( "2d" );
  ctx.scale(3,3);

  var img = document.createElement( "img" );
  img.setAttribute( "src", "data:image/svg+xml;base64," + btoa(unescape(encodeURIComponent(svgData))) );

  img.onload = function() {
      ctx.drawImage( img, 0, 0 );
      var canvasdata = canvas.toDataURL("image/png",1);

      var pngimg = '<img src="'+canvasdata+'">';
      d3.select("#pngdataurl").html(pngimg);

      var a = document.createElement("a");
      a.download = "download_img"+".png";
      a.href = canvasdata;
      document.body.appendChild(a);
      a.click();
  };

However I want to alter svg element before I want it convert to png. 但是我想在将svg元素转换为png之前对其进行更改。 Also I dont want to show that chnages on screen to the user. 另外,我也不想在屏幕上向用户显示变化。

I just would like to add opacity 1 to x axis labels and convert to png and let the svg on screen remain as it is with opacity 0 for x axis label. 我只想向x轴标签添加不透明度1并转换为png,并让屏幕上的svg保持不变,而x轴标签的不透明度为0。

How can i do that . 我怎样才能做到这一点 。 Any help appreciated. 任何帮助表示赞赏。

As Robert suggested, just do it... 正如罗伯特建议的那样,就做吧...

 $(".exportImageButton").on("click", function() { var svg = document.querySelector("svg"); var rect = document.querySelector("rect") rect.setAttribute("fill", "green") var svgData = new XMLSerializer().serializeToString(svg); var canvas = document.createElement("canvas"); var svgSize = svg.getBoundingClientRect(); canvas.width = svgSize.width * 3; canvas.height = svgSize.height * 3; canvas.style.width = svgSize.width; canvas.style.height = svgSize.height; var ctx = canvas.getContext("2d"); ctx.scale(3, 3); var img = document.createElement("img"); img.setAttribute("src", "data:image/svg+xml;base64," + btoa(unescape(encodeURIComponent(svgData)))); rect.setAttribute("fill", "red") img.onload = function() { ctx.drawImage(img, 0, 0); var canvasdata = canvas.toDataURL("image/png", 1); var pngimg = '<img src="' + canvasdata + '">'; d3.select("#pngdataurl").html(pngimg); var a = document.createElement("a"); a.download = "download_img" + ".png"; a.href = canvasdata; document.body.appendChild(a); a.click(); }; }) 
 <script src="https://cdnjs.cloudflare.com/ajax/libs/d3/3.4.11/d3.min.js"></script> <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <button class="exportImageButton">export</button> <svg> <rect width="200" height="200" fill="red" /> </svg> <canvas width="200px" height="200px" /> 

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM