TL; DR;
Gibt es eine Möglichkeit, ein Bild (meistens JPEG, PNG und GIF) direkt im Browser zu komprimieren, bevor es hochgeladen wird? Ich bin mir ziemlich sicher, dass JavaScript dies kann, aber ich kann keinen Weg finden, dies zu erreichen.
Hier ist das vollständige Szenario, das ich implementieren möchte:
- Der Benutzer besucht meine Website und wählt ein Bild über ein
input type="file"
Element aus. - Dieses Bild wird über JavaScript abgerufen. Wir führen einige Überprüfungen durch, z. B. das korrekte Dateiformat, die maximale Dateigröße usw.
- Wenn alles in Ordnung ist, wird auf der Seite eine Vorschau des Bildes angezeigt.
- Der Benutzer kann einige grundlegende Vorgänge ausführen, z. B. das Bild um 90 ° / -90 ° drehen, es nach einem vordefinierten Verhältnis zuschneiden usw. oder der Benutzer kann ein anderes Bild hochladen und zu Schritt 1 zurückkehren.
- Wenn der Benutzer zufrieden ist, wird das bearbeitete Bild komprimiert und lokal "gespeichert" (nicht in einer Datei gespeichert, sondern im Speicher / auf der Seite des Browsers).
- Der Benutzer füllt ein Formular mit Daten wie Name, Alter usw. aus.
- Wenn der Benutzer auf die Schaltfläche "Fertig stellen" klickt, wird das Formular mit Daten + komprimiertem Bild an den Server gesendet (ohne AJAX).
Der gesamte Prozess bis zum letzten Schritt sollte clientseitig erfolgen und mit den neuesten Versionen von Chrome und Firefox, Safari 5+ und IE 8+ kompatibel sein . Wenn möglich, sollte nur JavaScript verwendet werden (aber ich bin mir ziemlich sicher, dass dies nicht möglich ist).
Ich habe momentan nichts codiert, aber ich habe bereits darüber nachgedacht. Das lokale Lesen von Dateien ist über die Datei-API möglich. Die Bildvorschau und -bearbeitung kann mit dem Canvas- Element erfolgen, aber ich kann keine Möglichkeit finden, den Teil der Bildkomprimierung durchzuführen .
Laut html5please.com und caniuse.com ist die Unterstützung dieses Browsers (dank IE) ziemlich schwierig, könnte aber mit Polyfill wie FlashCanvas und FileReader erfolgen .
Eigentlich ist das Ziel, die Dateigröße zu reduzieren, daher sehe ich die Bildkomprimierung als Lösung. Ich weiß jedoch, dass hochgeladene Bilder jedes Mal am selben Ort auf meiner Website angezeigt werden, und ich kenne die Größe dieses Anzeigebereichs (z. B. 200 x 400). So konnte ich die Größe des Bilds an diese Abmessungen anpassen und so die Dateigröße reduzieren. Ich habe keine Ahnung, wie hoch das Kompressionsverhältnis für diese Technik sein würde.
Was denken Sie ? Hast du einen Rat, den du mir sagen kannst? Kennen Sie eine Möglichkeit, eine Bildbrowserseite in JavaScript zu komprimieren? Vielen Dank für Ihre Antworten.