Pengenalan
- Skia Canvas adalah library yang mengimplementasikan API menggambar HTML Canvas di Node.js tanpa browser.
- Dibangun di atas mesin grafis Skia milik Google, dan menghasilkan keluaran yang mirip dengan elemen
<canvas> di Chrome.
- Cocok untuk merender grafis berakselerasi perangkat keras di desktop dan server, atau menghasilkan berbagai format gambar.
Fitur utama
- Rendering dilakukan di GPU sehingga cepat dan ringkas, dengan pekerjaan diproses oleh kode native yang ditulis dalam Rust dan C++.
- Dapat merender ke jendela menggunakan pipeline grafis native OS dan menyediakan framework event UI yang mirip browser.
- Dapat membuat gambar dalam format raster (JPEG, PNG, WEBP) maupun vektor (PDF, SVG).
- Gambar dapat disimpan sebagai file, dikembalikan sebagai buffer, atau dienkode sebagai string dataURL.
- Menggunakan thread native dalam worker pool yang dapat dikonfigurasi pengguna untuk rendering asinkron dan file I/O.
- Dapat membuat beberapa 'halaman' pada canvas tertentu dan mengekspornya sebagai satu PDF multipage atau sebagai rangkaian gambar yang disimpan ke beberapa file.
- Dapat menyederhanakan, menumpulkan, menggabungkan, mengekstrak, dan mengatomisasi jalur Bézier menggunakan operasi boolean yang efisien atau interpolasi titik-ke-titik.
- Selain scaling, rotasi, dan transformasi, juga menyediakan transformasi perspektif 3D.
- Selain pola berbasis bitmap, bentuk juga dapat diisi dengan tekstur berbasis vektor dan garis dapat digambar dengan marker kustom.
- Mendukung sepenuhnya operator pemrosesan gambar CSS filter.
- Menyediakan kontrol tipografi yang kaya, termasuk teks multi-baris, pembungkusan kata, metrik teks per baris, small caps, ligatur, dan fitur OpenType lainnya.
- Font non-sistem dapat dimuat dari file lokal untuk digunakan.
Contoh penggunaan
Membuat file gambar
- Menggunakan
Canvas untuk membuat canvas berukuran 400x400, lalu mengambil konteks 2D.
- Menyediakan contoh penambahan gradasi warna dengan
createConicGradient dan menggambar persegi panjang.
- Menjelaskan cara menyimpan gambar, mengubahnya menjadi buffer, atau menyematkannya sebagai string melalui fungsi asinkron
render.
Rangkaian multipage
- Menjelaskan cara membuat beberapa halaman berwarna berbeda lalu menyimpannya sebagai file PDF multipage atau sebagai file gambar terpisah.
Merender ke jendela
- Menjelaskan cara membuat jendela berukuran 300x300 dengan
Window dan menggambar lingkaran melalui event draw.
1 komentar
Komentar Hacker News
https://windowjs.orgadalah proyek yang membungkus Skia, mengeksposnya melalui Canvas API, dan menyediakan runtime kecil dengan V8 yang tertanamJika tertarik pada implementasi Canvas yang kompatibel dengan Node, berikut beberapa referensi
canvaskit-wasmdisediakan oleh proyek Skia, dan tampaknya tidak mendukung akselerasi GPU@napi-rs/canvasmenyediakan binding tercepatnode-canvasmenggunakan Cairo alih-alih SkiaAda rasa penasaran tentang tujuan penggunaan library-library semacam ini
Skia menyediakan CanvasKit, build WASM yang mendukung Node, dan modul ini adalah binding Rust
Ada pertanyaan apakah ini mirip dengan wrapper untuk crate Rust
Pernah membuat sesuatu yang serupa untuk Node/Web, tidak sempurna tetapi cukup bagus
Upaya-upaya sebelumnya sulit karena memerlukan instalasi Node-Gyp
Ini lebih dari sekadar API rendering sederhana
Digunakan di
https://malmal.iountuk merender tile yang digambar di server, dan bekerja sangat baikAda rasa penasaran apakah ini bisa membantu merender MapLibre di sisi server