Introducción
- Skia Canvas es una biblioteca que implementa la API de dibujo de HTML Canvas en Node.js sin necesidad de navegador.
- Está basada en el motor gráfico Skia de Google y genera resultados similares al elemento
<canvas> de Chrome.
- Es adecuada para renderizar gráficos con aceleración por hardware en escritorio y servidor, o para exportar a varios formatos de imagen.
Funciones principales
- El renderizado se realiza en la GPU, por lo que es rápido y compacto, y procesa el trabajo con código nativo escrito en Rust y C++.
- Puede renderizar en ventanas usando el pipeline gráfico nativo del sistema operativo y ofrece un framework de eventos de UI similar al del navegador.
- Puede generar imágenes en formatos ráster (JPEG, PNG, WEBP) y vectoriales (PDF, SVG).
- Puede guardar imágenes en archivos, devolverlas como buffer o codificarlas como cadenas dataURL.
- Usa hilos nativos en un pool de workers configurable por el usuario para renderizado asíncrono y E/S de archivos.
- Puede crear varias "páginas" en un canvas dado y exportarlas como un solo PDF multipágina o como una secuencia de imágenes guardadas en varios archivos.
- Puede simplificar, suavizar, combinar, extraer y atomizar trazos Bézier usando operaciones booleanas eficientes o interpolación punto a punto.
- Además de escalado, rotación y transformaciones, ofrece transformaciones de perspectiva 3D.
- Además de patrones basados en mapas de bits, puede rellenar formas con texturas vectoriales y dibujar líneas con marcadores personalizados.
- Ofrece soporte completo para operadores de procesamiento de imágenes con filtros CSS.
- Proporciona un control tipográfico avanzado, incluyendo texto multilínea, ajuste de palabras, métricas de texto por línea, versalitas, ligaduras y otras funciones OpenType.
- Se pueden cargar y usar fuentes no incluidas en el sistema desde archivos locales.
Ejemplos de uso
Generación de archivos de imagen
- Se crea un canvas de 400x400 con
Canvas y se obtiene un contexto 2D.
- Se muestra un ejemplo de cómo agregar un degradado de color con
createConicGradient y dibujar un rectángulo.
- Se explica cómo guardar la imagen, convertirla en buffer o incrustarla como cadena mediante la función asíncrona
render.
Secuencia multipágina
- Se explica cómo crear páginas de varios colores y guardarlas como un archivo PDF multipágina o como archivos de imagen individuales.
Renderizado en ventana
- Se explica cómo crear una ventana de 300x300 con
Window y dibujar un círculo mediante el evento draw.
1 comentarios
Opiniones de Hacker News
https://windowjs.orges un proyecto que envuelve Skia, lo expone como una API de Canvas e integra v8 para ofrecer un runtime pequeñoSi te interesa una implementación de Canvas compatible con Node, puedes revisar lo siguiente
canvaskit-wasmes ofrecido por el proyecto Skia y parece que no soporta aceleración por GPU@napi-rs/canvasofrece el binding más rápidonode-canvasusa Cairo en lugar de SkiaHay curiosidad sobre el propósito de uso de estas bibliotecas
Skia ofrece CanvasKit, una compilación WASM compatible con Node, y este módulo es un binding de Rust
Hay una pregunta sobre si es similar al wrapper de un crate de Rust
Se hizo algo parecido para Node/Web y está bien, aunque no es perfecto
Los intentos anteriores eran difíciles porque requerían instalar Node-Gyp
Es más que una simple API de renderizado
Se usa en
https://malmal.iopara renderizar tiles dibujados en el servidor, y funciona muy bienHay curiosidad sobre si ayudaría a renderizar MapLibre del lado del servidor