TL; DR;Come comprimere un'immagine tramite Javascript nel browser?
C'è un modo per comprimere un'immagine (principalmente jpeg, png e gif) direttamente dal lato del browser, prima di caricarla? Sono abbastanza sicuro che JavaScript possa farlo, ma non riesco a trovare un modo per raggiungerlo.
Ecco lo scenario completo vorrei implementare:
- l'utente va al mio sito web, e scegliere un'immagine tramite un elemento
input type="file"
, - questa immagine viene recuperato tramite JavaScript, facciamo alcune verifiche come il formato file corretto, la dimensione massima del file ecc.
- se ogni cosa è OK, un'anteprima dell'immagine viene visualizzata sulla pagina,
- l'utente può fare alcune operazioni di base come come ruotare l'immagine di 90 °/-90 °, ritagliala seguendo un rapporto predefinito, ecc. oppure l'utente può caricare un'altra immagine e tornare al punto 1,
- quando l'utente è soddisfatto, l'immagine modificata è quindi compresso e "salvato" localmente (non salvato in un file, ma nella memoria del browser/pagina), -
- l'utente compila un modulo con dati come nome, età ecc,
- l'utente fa clic sul pulsante "Fine" pulsante, quindi il modulo contenente i dati + immagine compressa viene inviato al server (senza AJAX),
Il processo completo fino all'ultimo passaggio deve essere eseguito lato client e deve essere compatibile sugli ultimi Chrome e Firefox. , Safari 5+ e IE 8+. Se possibile, dovrebbe essere usato solo JavaScript (ma sono abbastanza sicuro che ciò non sia possibile).
Non ho codice in questo momento, ma ci ho già pensato. La lettura dei file in locale è possibile tramite File API, l'anteprima e la modifica delle immagini possono essere eseguite utilizzando l'elemento Canvas, ma Non riesco a trovare un modo per eseguire la parte di compressione dell'immagine.
Secondo html5please.com e caniuse.com, sostenendo coloro browser è molto difficile (grazie a IE), ma potrebbe essere fatto utilizzando polyfill come FlashCanvas e FileReader.
In realtà, l'obiettivo è ridurre la dimensione del file, quindi vedo la compressione dell'immagine come una soluzione. Ma so che le immagini caricate verranno visualizzate sul mio sito Web, ogni volta nello stesso luogo, e conosco la dimensione di questa area di visualizzazione (ad esempio 200x400). Quindi, potrei ridimensionare l'immagine per adattarla a quelle dimensioni, riducendo così la dimensione del file. Non ho idea di quale sarebbe il rapporto di compressione per questa tecnica.
Cosa ne pensi? Hai qualche consiglio da dirmi? Conoscete un modo per comprimere un'immagine lato browser in JavaScript? Grazie per le tue risposte
"solo JavaScript ** (ma sono abbastanza sicuro che questo non è possibile) . ** "Forse potresti smettere di programmare come il suo 1980 dove non è possibile, e iniziare a programmare come il suo 2017 dove è possibile. :) –