TL; DR;
Apakah ada cara untuk mengompres gambar (kebanyakan jpeg, png dan gif) secara langsung dari sisi browser, sebelum mengunggahnya? Saya cukup yakin JavaScript dapat melakukan ini, tetapi saya tidak dapat menemukan cara untuk mencapainya.
Berikut skenario lengkap yang ingin saya terapkan:
- pengguna membuka situs web saya, dan memilih gambar melalui
input type="file"
elemen, - gambar ini diambil melalui JavaScript, kami melakukan beberapa verifikasi seperti format file yang benar, ukuran file maksimum dll,
- jika semuanya baik-baik saja, pratinjau gambar ditampilkan di halaman,
- pengguna dapat melakukan beberapa operasi dasar seperti memutar gambar sebesar 90 ° / -90 °, memotongnya mengikuti rasio yang telah ditentukan, dll, atau pengguna dapat mengunggah gambar lain dan kembali ke langkah 1,
- ketika pengguna puas, gambar yang diedit kemudian dikompresi dan "disimpan" secara lokal (tidak disimpan ke file, tetapi di memori / halaman browser), -
- pengguna mengisi formulir dengan data seperti nama, usia dll,
- pengguna mengklik tombol "Selesai", kemudian formulir yang berisi data + gambar terkompresi dikirim ke server (tanpa AJAX),
Proses penuh hingga langkah terakhir harus dilakukan di sisi klien, dan harus kompatibel dengan Chrome dan Firefox, Safari 5+, dan IE 8+ terbaru . Jika memungkinkan, hanya JavaScript yang harus digunakan (tapi saya cukup yakin ini tidak mungkin).
Saya belum membuat kode apa pun sekarang, tetapi saya sudah memikirkannya. Pembacaan file secara lokal dimungkinkan melalui File API , pratinjau dan pengeditan gambar dapat dilakukan menggunakan elemen Canvas , tetapi saya tidak dapat menemukan cara untuk melakukan bagian kompresi gambar .
Menurut html5please.com dan caniuse.com , mendukung browser tersebut cukup sulit (terima kasih kepada IE), tapi bisa dilakukan dengan menggunakan polyfill seperti FlashCanvas dan FileReader .
Sebenarnya tujuannya adalah untuk memperkecil ukuran file, jadi saya melihat kompresi gambar sebagai solusi. Tapi, saya tahu bahwa gambar yang diunggah akan ditampilkan di situs web saya, setiap saat di tempat yang sama, dan saya tahu dimensi area tampilan ini (mis. 200x400). Jadi, saya bisa mengubah ukuran gambar agar sesuai dengan dimensi tersebut, sehingga mengurangi ukuran file. Saya tidak tahu berapa rasio kompresi untuk teknik ini.
Bagaimana menurut anda ? Apakah Anda punya saran untuk memberi tahu saya? Apakah Anda tahu cara mengompresi sisi browser gambar di JavaScript? Terima kasih atas balasan Anda.