Prześlij plik obrazu: czy kompresja jest już możliwa po stronie klienta?

9

Oferując przesyłanie plików zdjęć, zwykle użytkownik ma źle skompresowane i ogromne (ponad 10 megapikseli) pliki JPEG ze swoich aparatów lub telefonów. Po stronie serwera pliki te zostaną ponownie skompresowane do formatu 800 x 600 pikseli i jakości JPEG 7 lub 8.

Czy (już) jest to możliwe, aby wykonać tę kompresję po stronie klienta? Tak więc musiałbym przesłać jedynie 100 kB (800 x 600 pikseli), a nie 3 MB lub więcej. Coś jak:

(1) Dzięki nowemu interfejsowi API FileSystem API javascript ( http://slides.html5rocks.com/#filewriter ) możliwe byłoby odczytanie danych pliku zdjęcia do JS po stronie klienta.

(2) W takim razie konieczne byłoby ponowne zakodowanie danych JPEG, co jest możliwe, ale nie znalazłem żadnej biblioteki do tego (jeszcze). Czy ktoś zna taką bibliotekę?

(3) Ostatnim krokiem byłoby wysłanie ponownie skompresowanych danych JPEG po stronie serwera w celu przechowywania i uzyskanie adresu URL zapisanego pliku zdjęcia z powrotem z serwera w celu włączenia go do kodu HTML klienta.

Szukam wtyczki jQuery, innej biblioteki JS lub przykładowej strony internetowej, która to robi.

Chris
źródło
Czy to możliwe, aby zoptymalizować / kurczyć zdjęć przed wysłaniem? pytanie na StackOverflow przedstawia kilka możliwych rozwiązań.
danlefree

Odpowiedzi:

4

Plupload obsługuje zmianę rozmiaru html5 obrazów, a następnie ich przesyłanie, ma również awarie dla nieobsługiwanych przeglądarek ( kaszel IE ) we Flashu, Silverlight (i przestarzałych rzeczach, takich jak Google Gears i BrowserPlus).

Kris Erickson
źródło
2

Możesz załadować obraz do elementu canvas, zmienić jego rozmiar, a następnie odzyskać obraz, aby go załadować.

ZippyV
źródło
Aby dowiedzieć się, jak to zrobić, zobacz stackoverflow.com/questions/923885/...
Ilmari Karonen
2

Sprawdź to demo: http://makeitsolutions.com/labs/jic

To utworzona przeze mnie biblioteka javascript, która rozwiązuje ten problem.

Pozwala kompresować pliki jpg i png po stronie klienta w 100% za pomocą javascript i nie wymaga zewnętrznych bibliotek!

brunobar79
źródło