如何在画布上绘制内嵌svg(在DOM中)?

好吧,我需要一些有关将.svg文件/图像转换为.png文件/图像的帮助…

我的页面上显示了一个.svg图像。它保存在我的服务器上(.png文件)。我需要按需将其转换为.png文件(单击按钮),然后将.png文件保存在服务器上(我将通过.ajax请求执行此操作)。

但是问题是转换。

我阅读了很多有关html5

Canvas的内容,这些内容可能可以帮助我做我现在需要做的事情,但是我找不到解决我问题的明确方法,而且,我不明白我所发现的一切…所以我需要一些明确的建议/帮助,以帮助我了解如何做。

这是“ html idea”模板:

<html>

<body>

<svg id="mySvg" width="300px" height="300px">

<!-- my svg data -->

</svg>

<label id="button">Click to convert</label>

<canvas id="myCanvas"></canvas>

</body>

</html>

和一些js:

<script>

$("body").on("click","#button",function(){

var svgText = $("#myViewer").outerHTML;

var myCanvas = document.getElementById("canvas");

var ctxt = myCanvas.getContext("2d");

});

</script>

然后,我需要将svg绘制到Canvas中,取回base64数据,并将其保存在服务器上的.png文件中…但是…如何?我读到了很多不同的解决方案,我实际上…迷路了…我正在使用jsfiddle,但是实际上我…无处…

…感谢您的阅读/帮助

回答:

对于嵌入式SVG,您需要:

  • 将SVG字符串转换为 Blob
  • 获取Blob的URL
  • 创建图像元素并将URL设置为 src
  • 加载(onload)后,您可以将SVG绘制为画布上的图像
  • 用于toDataURL()从画布获取PNG文件。

例如:

function drawInlineSVG(ctx, rawSVG, callback) {

var svg = new Blob([rawSVG], {type:"image/svg+xml;charset=utf-8"}),

domURL = self.URL || self.webkitURL || self,

url = domURL.createObjectURL(svg),

img = new Image;

img.onload = function () {

ctx.drawImage(this, 0, 0);

domURL.revokeObjectURL(url);

callback(this);

};

img.src = url;

}

// usage:

drawInlineSVG(ctxt, svgText, function() {

console.log(canvas.toDataURL()); // -> PNG data-uri

});

当然,此处的console.log仅作为示例。请在此处存储/传输字符串。(我也建议onerror在方法内部添加一个处理程序)。

另外,请记住使用widthheight属性来设置画布大小,或者使用属性从JavaScript中设置画布大小。

以上是 如何在画布上绘制内嵌svg(在DOM中)? 的全部内容, 来源链接: utcz.com/qa/420963.html

回到顶部