TL; DR;
Czy istnieje sposób na skompresowanie obrazu (głównie jpeg, png i gif) bezpośrednio po stronie przeglądarki przed przesłaniem? Jestem prawie pewien, że JavaScript może to zrobić, ale nie mogę znaleźć sposobu, aby to osiągnąć.
Oto pełny scenariusz, który chciałbym wdrożyć:
- użytkownik przechodzi na moją stronę i wybiera obrazek za pomocą
input type="file"
elementu, - ten obraz jest pobierany przez JavaScript, przeprowadzamy weryfikacje, takie jak poprawny format pliku, maksymalny rozmiar pliku itp.
- jeśli wszystko jest w porządku, na stronie wyświetlany jest podgląd obrazu,
- użytkownik może wykonać kilka podstawowych operacji, takich jak obrót obrazu o 90 ° / -90 °, przycięcie go zgodnie z wcześniej zdefiniowanym współczynnikiem itp. lub może załadować inny obraz i powrócić do kroku 1,
- gdy użytkownik jest usatysfakcjonowany, edytowany obraz jest następnie kompresowany i „zapisywany” lokalnie (nie zapisywany do pliku, ale w pamięci / na stronie przeglądarki), -
- użytkownik wypełnia formularz danymi takimi jak imię i nazwisko, wiek itp.,
- użytkownik klika w przycisk „Zakończ”, po czym na serwer wysyłany jest formularz zawierający dane + skompresowany obraz (bez AJAX),
Cały proces aż do ostatniego kroku powinien być wykonany po stronie klienta i powinien być zgodny z najnowszymi przeglądarkami Chrome i Firefox, Safari 5+ i IE 8+ . Jeśli to możliwe, należy używać tylko JavaScript (ale jestem pewien, że nie jest to możliwe).
W tej chwili nic nie kodowałem, ale już o tym myślałem. Lokalne odczytywanie plików jest możliwe przez File API , podgląd i edycję obrazu można wykonać za pomocą elementu Canvas , ale nie mogę znaleźć sposobu na wykonanie części kompresji obrazu .
Według html5please.com i caniuse.com obsługa tych przeglądarek jest dość trudna (dzięki IE), ale można by to zrobić za pomocą polyfill, takiego jak FlashCanvas i FileReader .
Właściwie celem jest zmniejszenie rozmiaru pliku, więc uważam kompresję obrazu za rozwiązanie. Ale wiem, że wgrane obrazy będą się wyświetlać na mojej stronie za każdym razem w tym samym miejscu i znam wymiary tego obszaru wyświetlania (np. 200x400). Mogłem więc zmienić rozmiar obrazu, aby pasował do tych wymiarów, zmniejszając w ten sposób rozmiar pliku. Nie mam pojęcia, jaki byłby współczynnik kompresji dla tej techniki.
Co myślisz ? Czy masz jakieś rady, które możesz mi powiedzieć? Czy znasz jakiś sposób na skompresowanie obrazu po stronie przeglądarki w JavaScript? Dziękuję za twoje odpowiedzi.