Was sind die Unterschiede zwischen SVG und HTML5 Canvas? Sie scheinen mir beide dasselbe anzutun. Grundsätzlich zeichnen beide Vektorgrafiken mit Koordinatenpunkten.
Was vermisse ich? Was sind die Hauptunterschiede zwischen SVG und HTML5 Canvas? Warum sollte ich einen über den anderen wählen?
Antworten:
Siehe Wikipedia: http://en.wikipedia.org/wiki/Canvas_element
UPDATE: Ich verwende SVG aufgrund seiner Markup-Sprachfähigkeiten - es kann von XSLT verarbeitet werden und andere Markups in seinen Knoten enthalten. Ebenso kann ich SVG in meinem Markup (Chemie) halten. Dadurch kann ich SVG-Attribute (z. B. Rendering) durch Markup-Kombinationen bearbeiten. Dies mag in Canvas möglich sein, aber ich vermute, dass es viel schwieriger ist.
quelle
SVG ist wie ein "Draw" -Programm. Die Zeichnung wird als Zeichnungsanweisung für jede Form angegeben und jeder Teil einer beliebigen Form kann geändert werden. Zeichnungen sind formorientiert.
Canvas ist wie ein "Mal" -Programm. Sobald die Pixel auf dem Bildschirm erscheinen, ist dies Ihre Zeichnung. Sie können Formen nur ändern, indem Sie sie mit anderen Pixeln überschreiben. Gemälde sind pixelorientiert.
Für einige Programme ist es sehr wichtig, Zeichnungen ändern zu können. zB Zeichnen von Apps, Diagrammtools usw. SVG hat hier also einen Vorteil.
Für einige künstlerische Programme ist es wichtig, einzelne Pixel steuern zu können.
Mit Canvas ist es einfacher als mit SVG, eine hervorragende Animationsleistung für die Benutzermanipulation über Mauszüge zu erzielen.
Ein einzelnes Pixel auf dem Computerbildschirm verbraucht häufig 4 Byte an Informationen, und ein Computerbildschirm benötigt heutzutage mehrere Megabyte. Daher ist Canvas möglicherweise unpraktisch, wenn Sie den Benutzer ein Bild bearbeiten und dann erneut hochladen möchten.
Im Gegensatz dazu nimmt das Zeichnen einer Handvoll Formen, die mit SVG den gesamten Bildschirm abdecken, einige Bytes in Anspruch, wird schnell heruntergeladen und kann problemlos wieder hochgeladen werden, mit den gleichen Vorteilen, die in diese Richtung gehen, wie wenn es in die andere Richtung geht. SVG kann also schneller sein als Canvas.
Google hat Google Maps mit SVG implementiert. Das gibt der Web-App ihre flotte Leistung und das reibungslose Scrollen.
quelle
High Level Zusammenfassung von Canvas vs. SVG
Segeltuch
SVG
Detaillierte Informationen zu den Unterschieden finden Sie unter http://msdn.microsoft.com/en-us/library/ie/gg193983(v=vs.85).aspx
quelle
Es gibt einen Unterschied, was sie sind und was sie für Sie tun.
Um etwas näher auf Format und API einzugehen:
Mit svg können Sie die Datei in vielen verschiedenen Tools anzeigen, speichern und bearbeiten. Mit Leinwand zeichnen Sie einfach und es bleibt nichts über das, was Sie gerade getan haben, außer dem resultierenden Bild auf dem Bildschirm erhalten. Sie können beide animieren. SVG übernimmt das Neuzeichnen für Sie, indem Sie sich nur die angegebenen Elemente und Attribute ansehen. Bei Canvas müssen Sie jeden Frame mithilfe der API selbst neu zeichnen. Sie können beide skalieren, SVG führt dies jedoch automatisch aus. Wenn Sie die Zeichenfläche erneut verwenden, müssen Sie die Zeichenbefehle für die angegebene Größe erneut ausgeben.
quelle
Zwei Dinge, die mich bei SVG und Canvas am meisten getroffen haben, waren:
Möglichkeit zur Verwendung von Canvas ohne DOM, wobei SVG stark vom DOM abhängt und mit zunehmender Komplexität die Leistung verlangsamt. Wie im Spieldesign.
Der Vorteil der Verwendung von SVG besteht darin, dass die Auflösung auf allen Plattformen, auf denen Canvas fehlt, gleich bleibt.
Auf dieser Seite finden Sie viel mehr Details. http://dev.opera.com/articles/view/svg-or-canvas-choosing-between-the-two/
quelle
Es hängt absolut von Ihrem Bedarf ab.
Wenn Sie nur ein Bild / Diagramm auf einem Bildschirm anzeigen möchten, wird als Leinwand empfohlen. (Beispiel ist PNG, GIF, BMP usw.)
Wenn Sie die Funktionen Ihrer Grafiken erweitern möchten, z. B. wenn Sie mit der Maus über das Diagramm fahren und einen bestimmten Bereich zoomen möchten, ohne die Anzeigequalität zu beeinträchtigen, wählen Sie SVG. (Gutes Beispiel sind AutoCAD-, Visio- und GIS-Dateien).
Wenn Sie ein dynamisches Flussdiagramm-Erstellungswerkzeug mit Formverbinder erstellen möchten, ist es besser, SVG anstelle von CANVAS auszuwählen.
Wenn der Bildschirm größer wird, beginnt sich die Leinwand zu verschlechtern, da mehr Pixel gezeichnet werden müssen.
Wenn die Anzahl der Objekte auf dem Bildschirm zunimmt, beginnt sich SVG zu
verschlechtern, da wir sie kontinuierlich zum DOM hinzufügen.
Siehe auch: http://msdn.microsoft.com/en-us/library/gg193983(v=vs.85).aspx
quelle
SVG
Basierend auf dem Anwendungsfall wird SVG für Logos und Diagramme verwendet, da die Vektorgrafiken, die Sie zeichnen und vergessen haben. Wenn sich der Ansichtsport wie eine Größenänderung (oder ein Zoom) ändert, passt er sich selbst an und muss nicht neu gezeichnet werden.
Segeltuch
Canvas ist eine Bitmap (oder ein Raster), die durch Malen von Pixeln auf den Bildschirm erstellt wird. Es wird verwendet, um Spiele oder Grafikerfahrung zu entwickeln ( https://www.chromeexperiments.com/webgl ) in einem bestimmten Bereich zu entwickeln. Es malt Pixel und ändert sich, indem es neu gezeichnet wird. Da es sich um einen Rastertyp handelt, müssen wir ihn vollständig neu zeichnen, wenn sich der Ansichtsport ändert.
Referenz
http://www.sitepoint.com/7-reasons-to-consider-svgs-instead-of-canvas
http://en.wikipedia.org/wiki/WebGL
http://vector-conversions.com/vectorizing/raster_vs_vector.html
quelle
SVG
ist eine Spezifikation einer Zeichnung wie ein Dateiformat. Eine SVG ist ein Dokument. Sie können SVG-Dateien wie HTML-Dateien austauschen. Da SVG-Elemente und HTML-Elemente dieselbe DOM-API verwenden, ist es außerdem möglich, mithilfe von JavaScript ein SVG-DOM auf dieselbe Weise zu generieren wie ein HTML-DOM. Sie benötigen jedoch kein JavaScript, um eine SVG-Datei zu generieren. Ein einfacher Texteditor reicht aus, um eine SVG zu schreiben. Sie benötigen jedoch mindestens einen Taschenrechner, um die Koordinaten der Formen in der Zeichnung zu berechnen.CANVAS
ist nur ein Zeichenbereich. Es ist notwendig, JavaScript zu verwenden, um den Inhalt einer Zeichenfläche zu generieren. Sie können keine Leinwand austauschen. Es ist kein Dokument. Und die Elemente der Zeichenfläche sind nicht Teil des DOM-Baums. Sie können die DOM-API nicht zum Bearbeiten des Inhalts einer Zeichenfläche verwenden. Stattdessen müssen Sie eine dedizierte Canvas-API verwenden, um Formen in die Canvas zu zeichnen.Der Vorteil von a
SVG
ist, dass Sie die Zeichnung als Dokument austauschen können. Der Vorteil vonCANVAS
ist, dass es eine weniger ausführliche JavaScript-API zum Generieren des Inhalts gibt.Hier ist ein Beispiel, das zeigt, dass Sie ähnliche Ergebnisse erzielen können, aber die Vorgehensweise in JavaScript ist sehr unterschiedlich.
Wie Sie sehen, ist das Ergebnis fast das gleiche, aber der JavaScript-Code ist völlig anders.
SVG ist mit dem DOM - API erstellt
createElement
,setAttribute
undappendChild
. Alle Grafiken befinden sich in den Attributzeichenfolgen. SVG hat stärkere Primitive. Das CANVAS hat zum Beispiel nichts, was dem SVG-Bogenpfad entspricht. Das CANVAS-Beispiel versucht, den SVG-Bogen mit einer Bezier-Kurve zu emulieren. In SVG können Sie Elemente wiederverwenden, um sie zu transformieren. In CANVAS können Sie Elemente nicht wiederverwenden. Stattdessen müssen Sie eine JavaScript-Funktion schreiben, um sie zweimal aufzurufen. SVG hat eine,viewBox
die die Verwendung normalisierter Koordinaten ermöglicht, was Rotationen vereinfacht. Im LEINWAND müssen Sie die Koordinaten selbst anhand desclientWidth
und berechnenclientHeight
. Und Sie können alle SVG-Elemente mit CSS formatieren. In CANVAS können Sie mit CSS nichts stylen. Da SVG ein DOM ist, können Sie allen SVG-Elementen Ereignishandler zuweisen. Die Elemente in CANVAS haben keine DOM- und keine DOM-Ereignishandler.Andererseits ist der CANVAS-Code viel einfacher zu lesen. Sie müssen sich nicht um XML-Namensräume kümmern. Und Sie können die Grafikfunktionen direkt aufrufen, da Sie kein DOM erstellen müssen.
Die Lektion ist klar: Wenn Sie schnell einige Grafiken zeichnen möchten, verwenden Sie das CANVAS. Wenn Sie die Grafiken freigeben, mit CSS formatieren oder DOM-Ereignishandler in Ihren Grafiken verwenden möchten, erstellen Sie eine SVG.
quelle
Hinzufügen zu den oben genannten Punkten:
SVG ist im Vergleich zu JPEG, GIF usw. leicht für die Übertragung über das Web und skaliert auch extrem, wenn die Größe geändert wird, ohne die Qualität zu verlieren.
quelle
SVG
Es ist objektmodellbasiert.
Ist für die Verwendung großer Rendering-Bereiche geeignet.
SVG bietet jegliche Unterstützung für Ereignishandler.
Änderungen sind über Skript und CSS zulässig.
SVG hat eine bessere Skalierbarkeit
SVG ist vektorbasiert (bestehend aus Formen).
SVG ist nicht für Spielgrafiken geeignet. SVG hängt nicht von der Auflösung ab.
SVG ist für API-Animationen geeignet.
SVG eignet sich zum Drucken mit hoher Qualität und beliebiger Auflösung.
Canvas-Elemente
Es ist pixelbasiert.
Ist für kleine Renderings geeignet
Canvas bietet keinen Rückgriff für Event-Handler.
Änderungen sind nur über das Skript zulässig.
Canvas weist eine schlechte Skalierbarkeit auf.
Canvas basiert auf Raster (besteht aus einem Pixel).
Canvas eignet sich für Spielgrafiken.
Leinwand ist vollständig von der Auflösung abhängig.
Canvas hat keine API für Animationen.
Leinwand ist nicht zum Drucken von hoher Qualität und hoher Auflösung geeignet.
quelle