2012-11-02 16 views
5

Ho un server nodejs che riceve immagini codificate in base64 attraverso un websocket. Mi piacerebbe fare qualche manipolazione di immagini su quelle immagini e rimandarle indietro. Ho cercato un po 'in rete per trovare qualche libreria che mi aiutasse a fare questo, ma tutto quello che ho trovato erano librerie che catturano immagini memorizzate da qualche parte sul lato server, eseguono la manipolazione e salvano l'immagine. Apparentemente tutti prendono come input una stringa contenente il nome file dell'immagine, quindi immagino che sotto il cofano stiano recuperando l'immagine manualmente attraverso un flusso di file.Manipolazione delle immagini in NodeJS con dati immagine base64

La mia domanda è, c'è una libreria che può aiutarmi a lavorare direttamente sui dati di base64 (ovvero passare i dati come input alle funzioni) o dovrei salvare ogni volta l'immagine sul server, modificarla e inviarla indietro? Preferirei non andare con quest'ultimo perché sto lavorando su alcune applicazioni ad alte prestazioni, e tutto questo risparmio/caricamento sembra uno spreco di cicli. Altrimenti, vedi qualche altro modo in cui potrei ottenere questo (cioè ottenere il file immagine senza salvarlo e ricaricarlo, per esempio)?

Grazie.

risposta

2

Lavoro con Buffer s.

var img = new Buffer(img_string, 'base64'); 
// Work with your images like other tutorials do. 
+0

Non sono sicuro che funzionerà, le librerie apparentemente si aspettano un nome di file come input per le loro funzioni, quindi suppongo stiano aprendo un filestream e andando a recuperare manualmente l'immagine. Comunque proverai comunque. Grazie! – Masiar

+0

@Masiar le librerie devono lavorare con i buffer dietro le quinte. Potrebbero aver bisogno di un percorso file per aprire il file come Buffer, ma tutto si riduce a Buffers :-) –

+0

Sono assolutamente d'accordo :)! Ma l'API è chiara sul tipo di input che si aspetta. Proverò in un attimo se la sorgente di input può essere anche un buffer. Se è così, allora hai fatto la mia giornata. Altrimenti bella prova. Ti farò sapere al più presto. – Masiar

0

Questo può funzionare con "flussi leggibile": https://github.com/aheckmann/gm

vedere la seconda serie di esempi nel readme.

+0

Sembra buono.Il problema è che non riesco a creare un ReadableStream da una base64 formato. Potrei convertire in un buffer come fatto da @Florian, ma l'unico formato accettato è ReadableStream. – Masiar

Problemi correlati