2010-12-27 9 views
32

Estoy creando un sitio web usando node.js. He visto muchas bibliotecas que mencionaron piggy en la parte superior de imagemagick, etc. Hay una lista aquí: https://github.com/ry/node/wiki/modules#graphics¿Qué paquetes están disponibles para node.js para hacer recorte de imagen?

Lo que estoy tratando de hacer es tomar la imagen que un usuario carga, recortarla/dimensionarla en ciertas dimensiones el sitio requiere. ¿Cuál es el mejor/más activo script para hacer esto? Me gustaría uno con soporte npm. ¿Alguien tiene experiencia real usando algunos de estos?

+2

Puede ser reformulado para ser menos subjetivo. "Lo que es lo mejor ..." las preguntas generalmente no son útiles. – zzzzBov

Respuesta

26

Creo que encontré una envoltura Imagemagick decente que puede manejar esto bastante bien. Incluso en la memoria antes de escribir el archivo en el disco. (También conocido como carga de usuario -> nodo ImageMagick lib -> cdn y nunca toca el disco ... que es lo que quiero)

https://github.com/rsms/node-imagemagick

+0

La biblioteca node-imagemagick funciona como un encanto – Travis

+0

Parece que no funciona en Windows ahora debido a la falta de child_process en Windows :( –

+6

Además, checkout gm que funciona con imagemagick o graphicsmagick. Tiene una gran API encadenable , y es activamente compatible. https://github.com/aheckmann/gm Agregaría una nueva respuesta, pero no puedo desde que cerré esta pregunta. –

4

he utilizado nodo-lona de la gente LearnBoost - https://github.com/learnboost/node-canvas o npm install canvas - Son muy receptivos a los problemas y la biblioteca está bien escrita y es estable. No creo que puedas crear una imagen desde la memoria, pero si node-imagemagick no funciona para ti, valdría la pena intentarlo.

Si está familiarizado con la API de lienzo del lado del navegador, debería ser sencillo crear una imagen a partir de un archivo y dibujarla en un lienzo más pequeño. Hay un ejemplo de ello aquí:

https://github.com/LearnBoost/node-canvas/blob/master/examples/resize.js

Si está familiarizado con C++ que es bastante fácil de añadir métodos a los objetos nativos, el proyecto integrado limpiamente para mí en Mac OS primera vez. La documentación de cairo, la biblioteca de gráficos que alimenta el nodo-canvas, también es bastante clara. Me gustaría tener un vistazo a las funciones de carga del objeto en la imagen para ver si hay una manera de cargar desde un búfer de nodo:

https://github.com/LearnBoost/node-canvas/blob/master/src/Image.h

https://github.com/LearnBoost/node-canvas/blob/master/src/Image.cc

Buena suerte!

19

Para cualquiera que esté tratando de decidir entre Canvas e ImageMagick, probé ambos para comparar, y estoy obteniendo resultados mucho mejores de imagemagick. Aquí está una imagen que fue redimensionada y recortada de 1024x768 a 128x128:

http://i.imgur.com/tfeft.png

+2

Se pueden obtener mejores resultados utilizando IMagick con 'resizeImage()', usando el filtro 'imagick :: FILTER_LANCZOS' (algoritmo de remuestreo avanzado), y el ajuste de afilado a alrededor de 0.9. –

Cuestiones relacionadas