#short

Werbung* - Unterstütze die Seite gerne durch einen Kauf einem Partnershop!


Lernen macht hungrig oder? Dann koch dir doch was!



Ist Elektronik und Arduino dein Ding?

informatiker.lernen();

Letzte Änderung: 22-09-2026

Webentwicklung: HTML Canvas Grundlagen

Wir schauen uns in diesem Tutorial die Grundlagen des HTML5-Canvas-Elements an. Es geht darum einfache Formen zu zeichnen und Bilder ganz oder als Ausschnitt in einem Canvas-Element darzustellen

Einfügen

Was ist das HTML5-Canvas überhaupt?

HTML-Canvas ist ein HTML-Element, das einen rechteckigen Bereich auf einer Webseite definiert. Anders als SVG (vektorbasiert) arbeitet Canvas direkt mit einzelnen Pixeln (Bitmap). Gezeichnete Figuren (wie ein Kreis oder Rechteck) sind kein eigenständiges Element im Document Object Model (DOM). Der Browser weiß nach dem Zeichnen nicht mehr, wo sich ein Objekt im Canvas befindet.

Canvas ist deal für Spiele, Animationen, Diagramme oder Echtzeit-Bildbearbeitung.

Wir benötigen also zuerst ein HTML Dokument in dem wir ein Canavas-Element definieren. Etwas CSS sorgt für ein Schachbrettmuster, das uns eine bessere Übersicht bei den weiteren kleinen Experimenten mit dem Canvas-Element geben soll.

Die Höhe und Breite wurde im obigen Quelltext direkt im Tag mit einer Breite (width) von 720px und einer Höhe (height) von 1440px festgelegt. Im CSS-Style wiederum wurden für die mit Breite 1440px und die Höhe mit 2880 px angegeben. Das Canvas wird also durch die CSS-Formatierung doppelt so groß gezeichnet.

Weiterhin ist ein JavaScript-Dokument "main.js" eingebunden. Das Tutorial beginnt also mit dieser Ausgangssituation:

Einfügen

Der Context

Das Canvas-Element selbst stellt nur den Platz bereit. Um darauf zu malen, müssen wir über JavaScript den sogenannten Zeichenkontext (Context) holen.

Der Kontext ist eine Art Malwerkzeug, das uns Befehle bereitstellt, um Linien, Formen, Texte oder Bilder zu zeichnen sowie Farben und verschiedene Eigenschaften festzulegen.

main.js

Einfügen

Rechteck zeichnen

Wir können nun die Konstante "ctx", die den Kontext hält, zum Zeichnen eines Rechtecks nutzen.

Die Anweisung "strokeRect" zeichnet den Rand des Rechtecks.

Um einen rechteckigen Bereich zu löschen verwendet man "clearRect".

Die Füllfarbe wird der Eigenschaft "fillStyle" zugewiesen. Diese Farbe wird für alle folgenden Zeichenaktionen weiter beibehalten.

Die Strichfarbe bestimmt die Property: "strokeStyle". Farbangaben sind als CSS-Farbname, Hex-Code oder CSS-Farbfunktion möglich. Zusätzlich bestimmen wir die Linienbreite mit Hilfe der Eigenschaft "lineWidth".

Die Funktion save() speichert die bisherigen Werte der verschieden Properties z.b. die Strichfarbe, die Linienbreite und vieles mehr. Im unteren Beispiel werden die bisherigen Einstellungen gespeichert und StrokeStyle anschließend verändert. Nach dem Ändern werden die bisherigen Einstellungen mit restore() wiederhergestellt.

Am Ende dieses Abschnitts ergibt sich dieses Bild:

Einfügen

Formen nach Pfaden zeichnen

Ein Pfad wird mit "beginPath" gefolgt von "moveTo" bzw. "lineTo" festgelegt. Falls der Pfad geschlossen werden soll, kann die Anweisung "closePath" verwendet werden. Anschließend zeichnen "fill" bzw. "stroke" die Füllung bzw. den Rand.

Der obige Pfad zeichnet nun ein Dreieck hinzu. Im Bild sieht man nun auch die Wirkung der Anweisung "restore", denn die ursprüngliche Strichfarbe (blau) wurde wiederhergestellt.

Einfügen

Kreise zeichnen

Mit "arc" können Kreise gezeichnet werden. Dabei kann auch angegeben werden, ob gegen Uhrzeigerrichtung (counterclockwise) gezeichnet werden soll.

Mit der Angabe von "endAngle" und "startAngle" können Kreis auch nur teilweise gezeichnet werden. Die Winkel werden im Bogenmax angegeben, ein voll Umrundung geht als von 0 bis Pi * 2. Hier ein Halbkreis:

Mit "lineCap" wird der Linienabschluss bestimmt. Es ergibt sich bis hierher folgendes Bild:

Einfügen

Canvasgröße und Skalierung

Bei der Arbeit mit dem HTMLCanvas-Element gibt es einen fundamentalen Unterschied, der bei Anfängern oft zu unscharfen oder verzerrten Grafiken führt: Die Unterscheidung zwischen der internen Zeichenfläche und der Anzeigegröße.

Die Koordinatengröße (Zeichenfläche) wird direkt über die HTML-Attribute width und height definiert in diesem Tutorial sind das 720px mal 1440px. Hier wird bestimmt, wie viele Pixel zum Zeichnen zur Verfügung stehen. Der Standardwert ist 300 × 150 Pixel.

Die Anzeige-Größe (CSS-Größe) wird über CSS definiert, in diesem Tutorial sind das 1440px mal 2880px. Unsere Anzeige ist also doppelt so groß, wie die Zeichenfläche.

Es ist also wichtig beide Größen (Zeichenfläche und CSS-Größe) aufeinander abgestimmt zu bestimmen. Ansonsten kann das zu verzerrten, unscharfen oder verpixelten Grafiken führen.

Die CSS-Eigenschaft "image-rendering" bestimmt, wie der Browser das Canvas-Element hochskaliert (vergrößert) oder herunterskaliert. Das ist besonders wichtig, wenn die interne Zeichenfläche kleiner ist als die Anzeige-Größe im CSS. Durch Änderung dieser Eigenschaft im Style zu pixelated erscheinen unsere Formen schon um einiges schärfer.

Einfügen

Kreise und Bögen mit Pfaden verbinden

Kreise und Linien lassen sich auch einfach miteinander verbinden. Wir können auch die Art der Verbindung an den Schnittstellen durch "lineJoin" bestimmen.

Es ist mit "arcTo" auch möglich einen Kreisboden in den Pfad zu zeichnen.Zuvor legen wir fest, wie die Linie gestrichelt gezeichnet werden soll. Dazu wird ein Array mit der Strichlänge und dem Abstand zwischen den Strichen an die Anweisung "setLineDash" übergeben.

Kurven können auch noch freier als Bezierkurve gezeichnet werden. Sie dazu Bezierkurve auf Wikipedia

Am Ende dieses Abschnitts ergibt sich folgendes Bild mit Pfaden und verschiedenen Bögen, die teilweise gestrichelt dargestellt werden.

Einfügen

Farbverlauf

Auch Farbverläufe sind natürlich im Canvas möglich. Hier ein Beispiel mit LinearGradient. Der erzeugte Farbeverlauf wird einfach der "fillStyle"-Property zugewiesen.

Einfügen

Texte zeichnen

Am Ende darf natürlich Text nicht fehlen, denn auch das kann HTML-Canvas. Um den Text den gestrichelt zu zeichen, wird das LineDash-Array wieder leer gemacht. Hier nur ein paar Grundlagen, es gibt noch viel mehr Möglichkeiten.

Unser Bild wird nun noch um einen Farbverlauf und um Text ergänzt:

Einfügen

Bilder zeichnen

Beim Zeichnen von Bildern auf einem HTML Canvas gibt es drei wesentliche Aspekte: das Laden, die Performance und die Skalierung/Positionierung. Das wichtigste Werkzeug hierfür ist die Anweisung "drawImage".

Bilder können in Originalgröße, skaliert oder auch als Ausschnitt gezeichnet werden. Im Beispiel wird das Cover dieses Tutorials komplett ins Canvas gezeichnet. Wichtig ist hier, dass erst gezeichnet wird, wenn das Bild vollständig geladen ist, daher wir erst auf den Event onload gezeichnet.

Da das Bild für die Zeichenfläche zu groß ist, wird das Bild nur teilweise dargestellt. Gut, dass wir mit weiteren Parametern von "drawImage" auch skaliert zeichnen können.

Es ist auch möglich, nur einen Teil des Quellbildes auszuschneiden und skaliert ins Canvas zu zeichnen. Das ist ideal für Spritesheets in Spielen.

Einfügen

Fazit: Canvas Grundlagen

HTML Canvas ist ein mächtiges Werkzeug mit vielen Funktionen, um Grafik zu zeichnen und dabei jeden Pixel im Griff zu haben. Das Tutorial deckt nur die wichtigsten Funktionen ab. Ein weiteres Tutorial über die pixelgenau Manipulation der Bilddaten im Canvas folgt bald.

Einfügen


Unterstütze informatiker-lernen.de gerne durch einen Kauf auf einer Partner-Seite!

Werbung*


Ist Elektronik und Arduino dein Ding?



Lernen macht hungrig oder? Dann koch dir doch was mit Hello Fresh!



Interesse an Smart Home, aber günstig? Dann los, ELV hat da was!

Bausätze 300x250

Dein Feedback ist uns wichtig

Hat dir dieser Inhalt gefallen? Hast Du Kritik oder Verbesserungsvorschläge? Hast Du inhaltliche Fehler entdeckt?

Schreib uns gerne dein Anliegen an info@informatiker-lernen.de