2016-05-31 29 views
9

L'archiviazione di Firebase sembra molto interessante e facile da usare, ma mi chiedo se c'è un modo per ridimensionare un'immagine prima di caricarla in Firebase Storage, ad esempio, eseguire un processo utilizzando ImageMagick in un server e quindi eseguire il processo di caricamento utilizzando Firebase SDK ma noto che non ci sono funzioni di archiviazione per Firebase SDK Server.Ridimensiona un'immagine prima di caricarla nella Firebase

+1

Come per il caricamento "prima del caricamento su Firebase" ci sono [diverse librerie di nodi per la manipolazione delle immagini] (http://stackoverflow.com/questions/24026320/node-js-image-resizing-without-imagemagick), sì ? – Kato

+0

Sì, ci sono molti modi per farlo in qualsiasi lingua. –

risposta

14

È inoltre possibile utilizzare Firebase Storage + Google Cloud Functions per caricare un'immagine, ridimensionare l'immagine (utilizzando ImageMagick o simile) e riscriverla su Firebase Storage.

Ho un esempio di utilizzo di questi insieme here (sebbene si attivi il Cloud Vision API anziché un ridimensionatore di immagini).

Una nota a margine rapida: Firebase Storage non ha un client Node.js, consigliamo invece di utilizzare la libreria GCloud-Node.

+0

Stavo pensando lo stesso, ma non ero sicuro, sarebbe fantastico usare il gcloud-golang invece del nodo per questo. –

+0

È sempre possibile impostare notifiche di modifica dell'oggetto (https://cloud.google.com/storage/docs/object-change-notification) + un'app Google Go App Engine (https://cloud.google.com/appengine/ docs/go /) per farlo :) –

+0

Bene, sapere che le funzioni cloud fanno parte di Firebase è più facile implementare una soluzione utilizzando nodejs. –

2

Stiamo utilizzando JavaScript ridimensionamento, che utilizza dispositivi client potenza di elaborazione per ridimensionare l'immagine, e funziona alla grande, ci ha fatto risparmiare spazio e denaro, e salvare il cliente un po 'di tempo e anche denaro nella maggior parte dei casi di telefonia mobile.

Lo script originale che stiamo usando venuto from here, e la procedura da utilizzare è semplice come questo:

<input type="file" id="select"> 
<img id="preview"> 
<script> 
document.getElementById('select').onchange = function(evt) { 
    ImageTools.resize(this.files[0], { 
     width: 320, // maximum width 
     height: 240 // maximum height 
    }, function(blob, didItResize) { 
     // didItResize will be true if it managed to resize it, otherwise false (and will return the original file as 'blob') 
     document.getElementById('preview').src = window.URL.createObjectURL(blob); 
     // you can also now upload this blob using an XHR. 
    }); 
}; 
</script> 

Credo che il ragazzo (dcollien) merita un sacco di merito, in modo da ti consiglierei di votare la sua risposta.

0

Alcuni problemi sull'ultimo commento. Innanzitutto, se si tratta di client -> server, capire che non è garantito il ridimensionamento. Il cliente potrebbe provare a caricare un'immagine di dimensioni diverse se decide di non giocare secondo le regole di cui sopra. Non fidarti mai del cliente. Se vuoi che il client ridimensioni le cose provenienti dal server. Bene, questo sarà lo stesso di uno stile e non comporterebbe una riduzione della larghezza di banda.

+0

https://stackoverflow.com/questions/37557343/resize-an-image-before-uploading-it-to-firebase/49162553#comment85330829_37558536 –