Einführung
- Skia Canvas ist eine Bibliothek, die die HTML-Canvas-Zeichen-API in Node.js ohne Browser implementiert.
- Sie basiert auf Googles Skia-Grafik-Engine und erzeugt Ergebnisse, die dem
<canvas>-Element von Chrome ähneln.
- Sie eignet sich zum Rendern hardwarebeschleunigter Grafik auf Desktop und Server sowie zur Ausgabe in verschiedenen Bildformaten.
Hauptfunktionen
- Das Rendering erfolgt auf der GPU, ist schnell und kompakt und nutzt in Rust und C++ geschriebenen nativen Code für die Verarbeitung.
- Mithilfe der nativen Grafik-Pipeline des Betriebssystems kann in Fenster gerendert werden; außerdem wird ein Browser-ähnliches UI-Event-Framework bereitgestellt.
- Bilder können in Rasterformaten (JPEG, PNG, WEBP) und Vektorformaten (PDF, SVG) erzeugt werden.
- Bilder lassen sich als Datei speichern, als Buffer zurückgeben oder als
dataURL-String kodieren.
- Für asynchrones Rendering und Datei-I/O werden native Threads in einem vom Benutzer konfigurierbaren Worker-Pool verwendet.
- Auf einer gegebenen Canvas können mehrere „Seiten“ erzeugt und als einzelne mehrseitige PDF oder als Bildsequenz in mehreren Dateien ausgegeben werden.
- Bézier-Pfade lassen sich mithilfe effizienter boolescher Operationen oder Punkt-zu-Punkt-Interpolation vereinfachen, abstumpfen, kombinieren, extrahieren und atomisieren.
- Neben Skalierung, Rotation und Transformation werden auch 3D-Perspektivtransformationen unterstützt.
- Formen können nicht nur mit bitmapbasierten Mustern, sondern auch mit vektorbasierten Texturen gefüllt werden; außerdem lassen sich Linien mit benutzerdefinierten Markern zeichnen.
- CSS-Filter-Bildverarbeitungsoperatoren werden vollständig unterstützt.
- Es bietet umfangreiche typografische Kontrolle, darunter mehrzeiliger Text, Wortumbruch, Textmetriken pro Zeile, Kapitälchen, Ligaturen und weitere OpenType-Funktionen.
- Nicht-System-Schriftarten können aus lokalen Dateien geladen und verwendet werden.
Beispielverwendung
Bilddatei erzeugen
- Beispiel für das Erstellen einer 400x400-Canvas mit
Canvas und das Abrufen des 2D-Kontexts.
- Beispiel für das Hinzufügen eines Farbverlaufs mit
createConicGradient und das Zeichnen eines Rechtecks.
- Erläuterung, wie sich über die asynchrone Funktion
render ein Bild speichern, in einen Buffer umwandeln oder als String einbetten lässt.
Mehrseitige Sequenz
- Erläuterung, wie Seiten in mehreren Farben erzeugt und entweder als mehrseitige PDF-Datei oder als einzelne Bilddateien gespeichert werden.
In ein Fenster rendern
- Erläuterung, wie mit
Window ein 300x300 großes Fenster erzeugt und über das draw-Event ein Kreis gezeichnet wird.
1 Kommentare
Hacker-News-Kommentare
https://windowjs.orgist ein Projekt, das Skia kapselt, es über die Canvas-API zugänglich macht und mit eingebettetem v8 eine kleine Runtime bereitstelltWenn man sich für eine mit Node kompatible Canvas-Implementierung interessiert, kann man sich Folgendes ansehen
canvaskit-wasmwird vom Skia-Projekt bereitgestellt und scheint keine GPU-Beschleunigung zu unterstützen@napi-rs/canvasbietet die schnellsten Bindingsnode-canvasverwendet Cairo statt SkiaEs gibt Neugier darauf, wofür solche Bibliotheken verwendet werden
Skia bietet mit CanvasKit einen WASM-Build, der Node unterstützt, und dieses Modul ist ein Rust-Binding
Es gibt die Frage, ob es dem Wrapper eines Rust-Crate ähnelt
Es wurde etwas Ähnliches für Node/Web gebaut, und auch wenn es nicht perfekt ist, ist es gut
Frühere Versuche waren schwierig, weil eine Installation von Node-Gyp erforderlich war
Es ist mehr als nur eine einfache Rendering-API
wgpuhinzugefügt werden, und für WebGL-Unterstützung kann ANGLE hinzugefügt werdenEs wird auf
https://malmal.iozum Rendern serverseitig gezeichneter Kacheln verwendet und funktioniert sehr gutEs gibt die Frage, ob es beim serverseitigen Rendern von MapLibre helfen könnte