Da ein <canvas>
Element es nicht erlaubt, dass <svg>
direkt darauf gezeichnet wird, müssen Sie es zuerst zu einem konvertieren.
Dies ist ein ziemlich einfacher Prozess eine (kurze) Anzahl von Schritten:
Platz der SVG in ein Bild. Dies kann getan werden, indem Sie eine erstellen und .src
auf eine Daten-URL, die das SVG enthält, setzen.
var svg = document.querySelector('svg'),
img = document.createElement('img');
img.src = 'data:image/svg+xml;utf8,' + svg.outerHTML;
Dies kann ein wenig komplizierter sein, wenn die SVG-Zeichen enthalten werden Sie entkommen müssen (vor allem ein #
kann böse sein).
Legen Sie das Bild auf die Leinwand. Ein Canvas hat eine context
, die ermöglicht, dass (und andere, aber nicht <svg>
) hineingezogen werden.
var canvas = document.createElement('canvas'),
ctx = canvas.getContext('2d');
// now that we have the SVG nicely embedded in an image, we can
// use the image to size the canvas
canvas.width = img.width;
canvas.height = img.height;
// and draw the image onto the canvas (in the top/left corder)
// using the context
ctx.drawImage(img, 0, 0);
a working fiddle for you to play with
Da die Frage sich mit svg-filters
und diese wird markiert benötigen die #
, die Zuordnung von img.src
zu so etwas wie neu schreiben möchten:
img.src = svg.outerHTML.replace(/#/g, '%23');
Dies könnte http://stackoverflow.com/questions/3975499/convert-svg-to-image-j helfen peg-png-etc-in-the-browser –
@VinodLouis Danke, aber diese Antworten erfordern einige Verwendung von Bibliotheken. Ich muss es nur in Vanilla JS tun. – fur866