Giriş
- Skia Canvas, Node.js üzerinde HTML Canvas çizim API'sini tarayıcı olmadan uygulayan bir kütüphanedir.
- Google'ın Skia grafik motorunu temel alır ve Chrome'daki
<canvas> öğesine benzer sonuçlar üretir.
- Masaüstü ve sunucu ortamlarında donanım hızlandırmalı grafikler render etmek veya çeşitli görüntü formatları üretmek için uygundur.
Başlıca özellikler
- Render işlemi GPU üzerinde gerçekleşir; hızlı ve kompakt yapıdadır ve işleri Rust ile C++ ile yazılmış native kodla yürütür.
- OS'nin native grafik pipeline'ını kullanarak pencerelere render edebilir ve tarayıcıya benzer bir UI event framework'ü sunar.
- Raster (JPEG, PNG, WEBP) ve vektör (PDF, SVG) formatlarında görüntüler üretebilir.
- Görüntüleri dosya olarak kaydedebilir, buffer olarak döndürebilir veya dataURL dizesi olarak encode edebilir.
- Asenkron render ve dosya I/O için kullanıcı tarafından yapılandırılabilen worker pool içinde native thread'ler kullanır.
- Verilen bir canvas üzerinde birden fazla 'sayfa' oluşturabilir ve bunları tek bir çok sayfalı PDF ya da birden fazla dosyaya kaydedilmiş görüntü dizisi olarak çıktılayabilir.
- Verimli boolean işlemleri veya noktadan noktaya enterpolasyon kullanarak Bézier path'lerini sadeleştirebilir, yumuşatabilir, birleştirebilir, çıkarabilir ve atomize edebilir.
- Ölçekleme, döndürme ve dönüşümlere ek olarak 3D perspektif dönüşümleri sunar.
- Bitmap tabanlı pattern'lerin yanı sıra vektör tabanlı texture'larla şekilleri doldurabilir ve özel marker'larla çizgi çizebilir.
- CSS filter görüntü işleme operatörlerini tam olarak destekler.
- Çok satırlı, kelime kaydırmalı metinler, satır bazında metin metrikleri, small caps, ligatures ve diğer OpenType özellikleri dahil zengin tipografi kontrolü sunar.
- Sistem dışı font'ları yerel dosyalardan yükleyip kullanabilir.
Örnek kullanım
Görüntü dosyası oluşturma
Canvas kullanarak 400x400 boyutunda bir canvas oluşturup 2D context alınır.
createConicGradient kullanarak renk gradient'i ekleyip dikdörtgen çizen bir örnek sunulur.
- Asenkron
render fonksiyonu ile görüntüyü kaydetme, buffer'a dönüştürme veya string olarak embed etme yöntemleri açıklanır.
Çok sayfalı dizi
- Farklı renklerde sayfalar oluşturup bunları çok sayfalı bir PDF dosyası olarak ya da ayrı görüntü dosyaları olarak kaydetme yöntemi açıklanır.
Pencerede render etme
Window kullanarak 300x300 boyutunda bir pencere oluşturup draw event'i üzerinden bir daire çizme yöntemi açıklanır.
1 yorum
Hacker News görüşleri
https://windowjs.org, Skia’yı saran, onu Canvas API olarak sunan ve gömülü v8 ile küçük bir runtime sağlayan bir projedirNode ile uyumlu bir Canvas uygulamasıyla ilgileniyorsanız, şunlara bakabilirsiniz
canvaskit-wasm, Skia projesi tarafından sağlanıyor ve GPU hızlandırmayı desteklemiyor gibi görünüyor@napi-rs/canvas, en hızlı binding’i sunuyornode-canvas, Skia yerine Cairo kullanıyorBu tür kütüphanelerin kullanım amacına dair merak var
Skia, Node’u destekleyen bir WASM derlemesi olan CanvasKit’i sunuyor; bu modül ise onun Rust binding’i
Rust crate için bir wrapper’a benzer olup olmadığı soruluyor
Node/Web için benzer bir şey yapılmış; kusursuz değil ama iyi
Önceki denemelerde Node-Gyp kurulumu gerektiği için zorlayıcı olmuştu
Bu, basit bir rendering API’sinden fazlası
https://malmal.ioüzerinde sunucuda çizilen tile’ları render etmek için kullanılıyor ve son derece iyi çalışıyorMapLibre’ı sunucu tarafında render etmeye yardımcı olup olmayacağı merak ediliyor