¿Qué biblioteca debo usar para la manipulación de imágenes del lado del servidor en Node.JS? [cerrado]


117

Encontré una lista bastante grande de bibliotecas disponibles en la wiki de Node.JS, pero no estoy seguro de cuáles de ellas son más maduras y brindan un mejor rendimiento. Básicamente quiero hacer lo siguiente:

  1. cargar algunas imágenes en un servidor desde fuentes externas
  2. ponlos en un gran lienzo
  3. recortarlos y enmascararlos un poco
  4. aplicar un filtro o dos
  5. Cambiar el tamaño de la imagen final y darle un enlace

Gran ventaja si el paquete de nodo funciona tanto en Linux como en Windows .


Pregunta ya respondida aquí: stackoverflow.com/questions/4541332/…
DjebbZ

2
2015: esto también parece legítimo: github.com/oliver-moran/jimp
jmunsch

@jm_____ stackoverflow es una sesión de preguntas y respuestas y una wiki. siéntete libre de editar la respuesta para que más personas la noten.
Andrew Андрей Листочкин

Respuestas:


184

Respondiendo mi propia pregunta

Pasé dos días investigando las bibliotecas gráficas de Node.js.

lienzo de nodo

  • Lo probé primero porque estoy bastante familiarizado con la <canvas>API. Es una gran ventaja para una biblioteca.
  • requiere Cairo, que no tiene una fácil descarga de Windows. Sin embargo, lo encontré en la distribución GTK +.
  • además, necesita que se compile el código de enlace de la biblioteca nativa en la instalación del módulo. Utiliza Node-Waf, que aún no se ha portado a Windows.

gm

  • maduro
  • se ejecuta en Windows sin problemas
  • los documentos están bien pero no son exhaustivos: tuve que buscar en el código fuente para averiguar qué API está disponible
  • desafortunadamente, no hay una manera fácil de combinar imágenes con gm. Tal vez haya alguna forma de lograrlo, pero no he encontrado una después de pasar dos horas con ella.

nodo-imagemagick

  • El repositorio oficial tiene muy pocos comandos básicos de ImageMagick cubiertos, pero usé esta bifurcación (lo bueno es que NPM puede extraer bibliotecas directamente de los repositorios de git). Tiene fijaciones para las montageque hace exactamente lo que necesito.
  • ImageMagick es bastante lento , aunque funciona en Windows.

Nodo-Vips

  • Gran ventaja: utiliza una increíble biblioteca de VIPS con la que estoy familiarizado. VIPS es muy rápido y está optimizado para imágenes grandes. Es muy inteligente al utilizar los recursos de hardware: si su máquina tiene mucha RAM, hará todo el procesamiento en la memoria, pero cambiará a cachés del disco duro si la memoria es escasa o se requiere para otras aplicaciones.
  • Al igual que node-canvas, requiere Node-Waf, por lo que aún no está disponible para Windows.

También miré otras bibliotecas de la lista, pero la mayoría de ellas son muy inmaduras o no se ajustan a mi caso de uso. Realmente me gustaría intentar migrar a Node-Canvas o Node-Vips cuando Node-Waf se transfiera a Windows, pero hasta entonces me quedaré con node-imagemagick.


44
Gracias por regresar para responder su propia pregunta. ¡Excelente redacción!
mpen

En Windows, gm me pareció un poco lento, aunque creo que esto se debe en parte al tiempo que tomó generar instancias del ejecutable gm.
Gareth Oakley

11
El tiempo cambió y NODE-Vips tuvo más de 1 año sin actualización. En su lugar, recomiendo agregar Sharp a la lista. También usa VIPS y se mantiene de forma activa: github.com/lovell/sharp
Simon Fakir

5
Para aquellos que se adentran en esta cuestión en estos días, LWIP es otra buena alternativa. Sin dependencias externas, se basa en un complemento de node.js C ++.
MaxArt

1
github.com/lovell/sharp , otro enlace de nodo para libvips, ahora funciona en Windows.
jcupitt

6

Le recomiendo encarecidamente que compruebe gm con GraphicsMagick. API estable, rica en funciones, limpia, excelentes documentos y rápida.

Y funciona tanto en Windows como en Linux / MacOS / BSD / ...


3

Ella es el enlace a la implementación del lienzo basado en GDI +


1
No puedo hacer que esto funcione en absoluto. Recibo "% 1 no es una aplicación Win32 válida" tan pronto como la necesito.
mpen
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.