Gibt es eine Standardmethode zum Zeichnen einer SVG-Datei auf eine HTML5-Zeichenfläche? Google Chrome unterstützt das Laden der SVG als Bild (und das einfache Verwenden drawImage
). Die Entwicklerkonsole warnt jedoch davor resource interpreted as image but transferred with MIME type image/svg+xml
.
Ich weiß, dass eine Möglichkeit darin besteht, die SVG in Canvas-Befehle zu konvertieren (wie in dieser Frage ), aber ich hoffe, dass dies nicht benötigt wird. Ältere Browser interessieren mich nicht (wenn FireFox 4 und IE 9 etwas unterstützen, ist das gut genug).
Antworten:
EDIT 16. Dezember 2019
Path2D wird jetzt von allen gängigen Browsern unterstützt
BEARBEITEN 5. November 2014
Sie können jetzt
ctx.drawImage
HTMLImageElements zeichnen, die in einigen, aber nicht allen Browsern eine .svg-Quelle haben . Chrome, IE11 und Safari funktionieren, Firefox funktioniert mit einigen Fehlern (die jedoch nachts behoben wurden).Live Beispiel hier . Sie sollten ein grünes Quadrat in der Leinwand sehen. Das zweite grüne Quadrat auf der Seite ist dasselbe
<svg>
Element, das als Referenz in das DOM eingefügt wurde.Sie können auch die neuen Path2D-Objekte verwenden, um SVG-Pfade (Zeichenfolgen) zu zeichnen. Mit anderen Worten, Sie können schreiben:
Live Beispiel dafür hier.
Antwort der alten Nachwelt:
Es gibt nichts Natives, mit dem Sie SVG-Pfade im Canvas-Bereich nativ verwenden können. Sie müssen sich selbst konvertieren oder eine Bibliothek verwenden, um dies für Sie zu tun.
Ich würde vorschlagen, in canvg zu schauen:
http://code.google.com/p/canvg/
http://canvg.googlecode.com/svn/trunk/examples/index.htm
quelle
drawImage
. Aber ich bekomme immer noch diese Warnung. Woher kommt das?Entschuldigung, ich habe nicht genug Ruf, um die Antwort von @Matyas zu kommentieren, aber wenn sich das Bild des SVG auch in base64 befindet, wird es in die Ausgabe gezeichnet.
Demo:
quelle
img
Tags in der durchlaufensvg
und anschließend Bilder separat auf die Leinwand zeichnen.Sie können einfache
svg
s einfach auf eine Leinwand zeichnen, indem Sie:Hinweis: Der einzige Nachteil der Methode besteht darin, dass keine in die eingebetteten Bilder gezeichnet werden können
svg
. (siehe Demo)Demonstration:
(Beachten Sie, dass das eingebettete Bild nur im
svg
) sichtbar ist.quelle
Mozilla bietet eine einfache Möglichkeit zum Zeichnen von SVG auf Leinwand mit dem Namen " Zeichnen von DOM-Objekten in eine Leinwand ".
quelle
Wie Simon oben sagt, sollte die Verwendung von drawImage nicht funktionieren. Verwenden Sie jedoch die canvg- Bibliothek und:
Dies kommt von dem Link, den Simon oben bereitstellt, der eine Reihe anderer Vorschläge enthält und darauf hinweist, dass Sie entweder auf canvg.js und rgbcolor.js verlinken oder diese herunterladen möchten. Mit diesen können Sie eine SVG-Datei entweder über eine URL oder mithilfe von Inline-SVG-Code zwischen SVG-Tags in JavaScript-Funktionen bearbeiten und laden.
quelle