简体   繁体   English

如何使用 canvg.js 和 Canvas 将 SVG 导出为 PNG

[英]How to export SVG as PNG using canvg.js and Canvas

We are trying to export SVG picture as PNG using canvg.js but when we click the button "Take a screenshot" the console shows error "vue.runtime.esm.js?2b0e:619 [Vue warn]: Error in v-on handler: "ReferenceError: SVG2PNG is not defined" ".我们正在尝试使用 canvg.js 将 SVG 图片导出为 PNG,但是当我们单击“截屏”按钮时,控制台显示错误“vue.runtime.esm.js?2b0e:619 [Vue warn]: Error in v-on处理程序:“ReferenceError:未定义 SVG2PNG” “。 Here is the button that calls function "tipka()" , I followed this example: "https://jsgao0.wordpress.com/2016/06/02/export-svg-as-png-using-canvg-js-and-canvas/".这是调用 function "tipka()"的按钮,我遵循了这个例子: "https://jsgao0.wordpress.com/2016/06/02/export-svg-as-png-using-canvg-js-and -帆布/”。

<input id='downloadBtn' @click="tipka()" type='button' style="margin-top:500px; position:absolute" value='Download'/>

Here is the script file:这是脚本文件:

import Canvg from "canvg";

export default {
  methods: {
    SVG2PNG(svg, callback) {
      var canvas = document.createElement("canvas"); // Create a Canvas element.
      var ctx = canvas.getContext("2d"); // For Canvas returns 2D graphic.
      var data = svg.outerHTML; // Get SVG element as HTML code.
      canvg(canvas, data); // Render SVG on Canvas.
      callback(canvas); // Execute callback function.
    },
    generateLink(fileName, data) {
      var link = document.createElement("a");
      link.download = fileName;
      link.href = data;
      return link;
    },

    tipka() {
      var element = document.getElementById("svg-01"); // Get SVG element.
      SVG2PNG(element, function (canvas) {
        // Arguments: SVG element, callback function.
        var base64 = canvas.toDataURL("image/png"); // toDataURL return DataURI as Base64 format.
        generateLink("SVG2PNG-01.png", base64).click(); // Trigger the Link is made by Link Generator and download.
      });
    },
  },
};

You don't need to put SVG2PNG in the exported methods object (and indeed you shouldn't, in this case, to be able to access it with just SVG2PNG() ).您不需要将 SVG2PNG 放在导出的方法 object 中(实际上,在这种情况下,您不应该只使用SVG2PNG()来访问它)。

The same goes for generateLink . generateLink也是如此。

Instead, you should be fine with just相反,你应该没问题

import Canvg from "canvg";

function SVG2PNG(svg, callback) {
  var canvas = document.createElement("canvas"); // Create a Canvas element.
  var ctx = canvas.getContext("2d"); // For Canvas returns 2D graphic.
  var data = svg.outerHTML; // Get SVG element as HTML code.
  Canvg(canvas, data); // Render SVG on Canvas.
  callback(canvas); // Execute callback function.
}

function generateLink(fileName, data) {
  var link = document.createElement("a");
  link.download = fileName;
  link.href = data;
  return link;
}

export default {
  methods: {
    tipka() {
      var element = document.getElementById("svg-01"); // Get SVG element.
      SVG2PNG(element, function (canvas) {
        // Arguments: SVG element, callback function.
        var base64 = canvas.toDataURL("image/png"); // toDataURL return DataURI as Base64 format.
        generateLink("SVG2PNG-01.png", base64).click(); // Trigger the Link is made by Link Generator and download.
      });
    },
  },
};

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

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