TL; DR;
Чи є спосіб стиснути зображення (здебільшого jpeg, png та gif) безпосередньо на стороні браузера, перш ніж завантажувати його? Я майже впевнений, що JavaScript може це зробити, але я не можу знайти спосіб цього досягти.
Ось повний сценарій, який я хотів би реалізувати:
- користувач переходить на мій веб-сайт і вибирає зображення за допомогою
input type="file"
елемента, - це зображення отримується за допомогою JavaScript, ми виконуємо певну перевірку, таку як правильний формат файлу, максимальний розмір файлу тощо,
- якщо все в порядку, на сторінці відображається попередній перегляд зображення,
- користувач може виконати деякі основні операції, такі як поворот зображення на 90 ° / -90 °, обрізання його за попередньо визначеним співвідношенням тощо, або користувач може завантажити інше зображення і повернутися до кроку 1,
- коли користувач задоволений, відредаговане зображення потім стискається та "зберігається" локально (не зберігається у файлі, а в пам'яті / сторінці браузера), -
- користувач заповнює форму такими даними, як ім'я, вік тощо,
- користувач натискає кнопку "Готово", потім форма, що містить дані + стиснене зображення, надсилається на сервер (без AJAX),
Повний процес до останнього кроку повинен виконуватися на стороні клієнта і повинен бути сумісним на найновіших Chrome та Firefox, Safari 5+ та IE 8+ . Якщо можливо, слід використовувати лише JavaScript (але я впевнений, що це неможливо).
Зараз я нічого не кодую, але про це вже думав. Локальне читання файлів можливо за допомогою API файлів , попередній перегляд та редагування зображень можна здійснити за допомогою елемента Canvas , але я не можу знайти спосіб стиснення зображення .
За html5please.com і caniuse.com , підтримуючи тих , браузер досить жорсткі (завдяки IE), але може бути зроблено з допомогою polyfill , таких як FlashCanvas і FileReader .
Насправді, мета - зменшити розмір файлу, тому я бачу стиснення зображення як рішення. Але я знаю, що завантажені зображення будуть відображатися на моєму веб-сайті щоразу в одному і тому ж місці, і я знаю розмір цієї області відображення (наприклад, 200x400). Отже, я міг змінити розмір зображення відповідно до цих розмірів, тим самим зменшивши розмір файлу. Я не уявляю, яким би був ступінь стиснення для цієї техніки.
Що ти думаєш ? Чи маєте ви якусь пораду сказати мені? Чи знаєте ви який-небудь спосіб стиснути зображення з боку браузера в JavaScript? Дякую за відповіді.