web-dev-qa-db-fra.com

Quels packages sont disponibles pour que node.js effectue le recadrage d'image?

Je crée un site Web en utilisant node.js. J'ai vu de nombreuses bibliothèques mentionner que piggy back sur imagemagick etc. Il y a une liste ici: https://github.com/ry/node/wiki/modules#graphics

Ce que j'essaie de faire, c'est de prendre l'image qu'un utilisateur télécharge, de la recadrer/de la dimensionner à certaines dimensions requises par le site. Quel est le script le meilleur/le plus actif pour ce faire? Je voudrais un avec le support npm. Quelqu'un at-il une expérience réelle de l'utilisation de certains d'entre eux?

33
Travis

Je pense que j'ai trouvé un emballage imagemagick décent qui peut très bien gérer cela. Même en mémoire avant d'écrire le fichier sur le disque. (aka user upload -> node imagemagick lib -> cdn et ne jamais toucher le disque ... c'est ce que je veux)

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

26
Travis

Pour tous ceux qui essaient de faire un choix entre Canvas et ImageMagick, je viens d'essayer les deux à titre de comparaison, et j'obtiens de bien meilleurs résultats avec imagemagick. Voici une image qui a été redimensionnée et recadrée de 1024x768 à 128x128:

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

19
sak

Si vous devez pouvoir dessiner ou faire des effets sur vos images, vous aurez peut-être toujours besoin de canvas ou d'ImageMagick, mais en termes de vitesse et d'utilisation de la mémoire, il existe quelques meilleures options.

Voici une référence de quelques bibliothèques d'images différentes.

https://github.com/libvips/libvips/wiki/Speed-and-memory-use

ImageMagick est lent et consomme beaucoup de mémoire.

Essayez Vips, qui est utilisé par la bibliothèque pointue .

6
Tyler Larson

J'ai utilisé node-canvas des gens de LearnBoost - https://github.com/learnboost/node-canvas ou npm install canvas - ils sont très réactifs aux problèmes et la bibliothèque est bien écrite et stable. Je ne pense pas que vous puissiez créer une image à partir de la mémoire, mais si node-imagemagick ne fonctionne pas pour vous, cela vaut la peine d'essayer.

Si vous connaissez l'API de canevas côté navigateur, il devrait être simple de créer une image à partir d'un fichier et de la dessiner dans un canevas plus petit. Il y a un exemple de cela ici:

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

Si vous êtes familier avec C++, il est assez facile d'ajouter des méthodes aux objets natifs, le projet a été construit proprement pour moi sur Mac OS pour la première fois. La documentation de cairo, la bibliothèque graphique qui alimente node-canvas, est également assez claire. J'examinerais les fonctions de chargement de l'objet Image pour voir s'il existe un moyen de charger à partir d'un Node Buffer:

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

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

Bonne chance!

4
RandomEtc