2010-12-27 10 views
32

Sto creando un sito Web utilizzando node.js. Ho visto molte biblioteche menzionate sul retro di imagemagick ecc. C'è una lista qui: https://github.com/ry/node/wiki/modules#graphicsQuali pacchetti sono disponibili per node.js per il ritaglio di immagini?

Quello che sto cercando di fare è prendere l'immagine che un utente carica, ritagliarla/ridimensionarla in certe dimensioni il sito richiede. Qual è lo script migliore/più attivo per farlo? Mi piacerebbe uno con supporto di npm. Qualcuno ha esperienza reale usando alcuni di questi?

+2

Questo può essere riformulato per essere meno soggettivo. Le domande "Le migliori ..." in genere non sono utili. – zzzzBov

risposta

26

Penso di aver trovato un involucro decente di imagemagick in grado di gestirlo abbastanza bene. Anche in memoria prima di scrivere il file su disco. (Aka caricare utente -> nodo ImageMagick lib -> cdn e mai toccare il disco ... che è quello che voglio)

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

+0

La libreria node-imagemagick funziona come un fascino – Travis

+0

Non sembra funzionare correttamente su Windows a causa della mancanza di child_process su Windows :( –

+6

Inoltre, checkout gm che funziona con imagemagick o graphicsmagick. Ha una grande API concatenabile ed è attivamente supportato https://github.com/aheckmann/gm Vorrei aggiungere una nuova risposta, ma non posso poiché questa domanda è stata chiusa. –

4

Ho usato nodo-tela dalla gente LearnBoost - https://github.com/learnboost/node-canvas o npm install canvas - sono molto sensibili ai problemi e la biblioteca è ben scritta e stabile. Non penso che tu possa ancora creare un'immagine dalla memoria, ma se node-imagemagick non funziona per te allora varrebbe la pena provare.

Se si ha familiarità con l'API della tela sul lato del browser, dovrebbe essere semplice creare un'immagine da un file e disegnarla in una tela più piccola. C'è un esempio di quella qui:

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

Se avete familiarità con C++ è abbastanza facile da aggiungere i metodi per gli oggetti nativi, il progetto costruito in modo pulito per me su Mac OS prima volta. Anche la documentazione di cairo, la libreria grafica che alimenta il nodo-tela, è abbastanza chiara. Mi piacerebbe prendere uno sguardo alle funzioni di carico dell'oggetto immagine per vedere se c'è un modo per caricare da un buffer nodo:

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

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

Buona fortuna!

19

Per chiunque stia tentando di decidere tra Canvas e ImageMagick, ho appena provato entrambi per il confronto, e sto ottenendo risultati molto migliori da imagemagick. Ecco un'immagine che è stata ridimensionata e ritagliata da 1024x768 a 128x128:

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

+2

È possibile ottenere risultati ancora migliori utilizzando IMagick con 'resizeImage()', utilizzando il filtro 'imagick :: FILTER_LANCZOS' (algoritmo di ricampionamento avanzato) e la nitidezza impostata attorno a 0.9. –

Problemi correlati