परिचय
- Skia Canvas एक लाइब्रेरी है जो Node.js में HTML Canvas drawing API को ब्राउज़र के बिना implement करती है.
- यह Google के Skia graphics engine पर आधारित है और Chrome के
<canvas> element जैसे मिलते-जुलते परिणाम बनाती है.
- यह desktop और server पर hardware-accelerated graphics render करने या विभिन्न image formats output करने के लिए उपयुक्त है.
मुख्य विशेषताएँ
- Rendering GPU पर होती है, इसलिए यह तेज़ और compact है, और काम को Rust तथा C++ में लिखे native code से संभालती है.
- यह OS native graphics pipeline का उपयोग करके window में render कर सकती है और browser जैसे UI event framework प्रदान करती है.
- यह raster (JPEG, PNG, WEBP) और vector (PDF, SVG) formats में images बना सकती है.
- Images को file के रूप में save किया जा सकता है, buffer के रूप में लौटाया जा सकता है, या dataURL string में encode किया जा सकता है.
- Asynchronous rendering और file I/O के लिए यह user-configurable worker pool में native threads का उपयोग करती है.
- दिए गए canvas पर कई 'pages' बनाए जा सकते हैं और उन्हें एक single multi-page PDF या कई files में saved image sequence के रूप में output किया जा सकता है.
- Efficient boolean operations या point-to-point interpolation का उपयोग करके Bezier paths को simplify, smooth, combine, excerpt और atomize किया जा सकता है.
- Scaling, rotation और transforms के अलावा यह 3D perspective transforms भी प्रदान करती है.
- Bitmap-based patterns के अलावा vector-based textures से shapes को fill किया जा सकता है और custom markers के साथ lines draw की जा सकती हैं.
- यह CSS filter image processing operators को पूरी तरह support करती है.
- यह multi-line, word-wrapped text, line-by-line text metrics, small caps, ligatures और अन्य OpenType features सहित समृद्ध typography control प्रदान करती है.
- Non-system fonts को local files से load करके इस्तेमाल किया जा सकता है.
उदाहरण उपयोग
Image file बनाना
Canvas का उपयोग करके 400x400 आकार का canvas बनाया जाता है और 2D context लिया जाता है.
createConicGradient का उपयोग करके color gradient जोड़ने और rectangle draw करने का उदाहरण दिया गया है.
- Asynchronous function
render के माध्यम से image को save करने, buffer में बदलने, या string के रूप में embed करने का तरीका बताया गया है.
Multi-page sequence
- अलग-अलग रंगों वाले pages बनाकर उन्हें multi-page PDF file के रूप में save करने या individual image files के रूप में save करने का तरीका समझाया गया है.
Window में rendering
Window का उपयोग करके 300x300 आकार की window बनाकर draw event के माध्यम से circle draw करने का तरीका बताया गया है.
1 टिप्पणियां
Hacker News राय
https://windowjs.orgएक ऐसा प्रोजेक्ट है जो Skia को रैप करता है, उसे Canvas API के रूप में एक्सपोज़ करता है, और v8 को एम्बेड करके एक छोटा runtime प्रदान करता हैअगर Node के साथ compatible Canvas implementation में रुचि है, तो निम्नलिखित देखे जा सकते हैं
canvaskit-wasmSkia प्रोजेक्ट द्वारा प्रदान किया जाता है, और लगता है कि यह GPU acceleration को support नहीं करता@napi-rs/canvasसबसे तेज़ binding प्रदान करता हैnode-canvasSkia की जगह Cairo का उपयोग करता हैऐसी लाइब्रेरीज़ के उपयोग के उद्देश्य को लेकर जिज्ञासा है
Skia, Node को support करने वाला WASM build CanvasKit प्रदान करता है, और यह मॉड्यूल एक Rust binding है
यह सवाल है कि क्या यह Rust crate के wrapper जैसा है
Node/Web के लिए ऐसा ही कुछ बनाया गया था, और भले ही यह परफेक्ट नहीं है, लेकिन अच्छा है
पहले के प्रयासों में Node-Gyp installation की आवश्यकता होती थी, इसलिए वे कठिन थे
यह सिर्फ़ एक साधारण rendering API से बढ़कर है
https://malmal.ioमें इसका उपयोग server पर draw किए गए tiles को render करने के लिए किया जाता है, और यह बहुत अच्छी तरह काम करता हैयह जानने की जिज्ञासा है कि क्या यह MapLibre को server-side render करने में मदद करेगा