Saya mencari cara untuk mengubah ukuran sisi klien gambar dengan JavaScript (benar-benar mengubah ukuran, tidak hanya mengubah lebar dan tinggi).
Saya tahu dimungkinkan untuk melakukannya dalam Flash tetapi saya ingin menghindarinya jika memungkinkan.
Apakah ada algoritma open source di suatu tempat di web?
Jawaban:
Inilah intinya yang melakukan ini: https://gist.github.com/dcollien/312bce1270a5f511bf4a
(versi es6, dan versi .js yang dapat dimasukkan dalam tag skrip)
Anda dapat menggunakannya sebagai berikut:
Ini mencakup banyak deteksi dukungan dan polyfill untuk memastikan itu berfungsi pada sebanyak mungkin browser yang bisa saya kelola.
(itu juga mengabaikan gambar gif - kalau-kalau itu animasi)
sumber
imageSmoothingEnabled
sebagai true` danimageSmoothingQuality
kehigh
. Dalam naskah yang memblokir terlihat seperti:const ctx = canvas.getContext('2d'); ctx.imageSmoothingEnabled = true; (ctx as any).imageSmoothingQuality = 'high'; ctx.drawImage(image, 0, 0, width, height);
Jawabannya adalah ya - dalam HTML 5 Anda dapat mengubah ukuran gambar sisi klien menggunakan elemen kanvas. Anda juga dapat mengambil data baru dan mengirimkannya ke server. Lihat tutorial ini:
http://hacks.mozilla.org/2011/01/how-to-develop-a-html5-image-uploader/
sumber
Jika Anda mengubah ukuran sebelum mengunggah, saya baru tahu ini http://www.plupload.com/
Itu melakukan semua keajaiban untuk Anda dalam metode apa pun yang bisa Anda bayangkan.
Sayangnya ukuran HTML5 hanya didukung dengan browser Mozilla, tetapi Anda dapat mengarahkan browser lain ke Flash dan Silverlight.
Saya baru saja mencobanya dan itu bekerja dengan android saya!
Saya menggunakan http://swfupload.org/ dalam sekejap, ia melakukan pekerjaan dengan sangat baik, tetapi ukurannya sangat kecil. (tidak ingat batasnya) dan tidak kembali ke html4 ketika flash tidak tersedia.
sumber
http://nodeca.github.io/pica/demo/
Di browser modern, Anda dapat menggunakan kanvas untuk memuat / menyimpan data gambar. Tetapi Anda harus mengingat beberapa hal jika Anda mengubah ukuran gambar pada klien:
sumber
Mungkin dengan tag kanvas (meskipun ini tidak portabel). Ada sebuah blog tentang cara memutar gambar dengan kanvas di sini , saya kira jika Anda dapat memutarnya, Anda dapat mengubah ukurannya. Mungkin itu bisa menjadi titik awal.
Lihat perpustakaan ini juga.
sumber
Anda dapat menggunakan kerangka kerja pemrosesan gambar javascript untuk pemrosesan gambar sisi klien sebelum mengunggah gambar ke server.
Di bawah ini saya menggunakan MarvinJ untuk membuat kode runnable berdasarkan contoh di halaman berikut: "Memproses gambar di sisi klien sebelum mengunggahnya ke server"
Pada dasarnya saya menggunakan metode Marvin.scale (...) untuk mengubah ukuran gambar. Lalu, saya mengunggah gambar sebagai gumpalan (menggunakan metode image.toBlob () ). Server menjawab kembali dengan memberikan URL gambar yang diterima.
sumber
Ya, dengan browser modern ini benar-benar bisa dilakukan. Bahkan bisa dilakukan hingga mengunggah file secara khusus sebagai file biner setelah melakukan sejumlah perubahan kanvas.
http://jsfiddle.net/bo40drmv/
(jawaban ini merupakan peningkatan dari jawaban yang diterima di sini )
Perlu diketahui proses pengiriman hasil dalam PHP dengan sesuatu yang mirip dengan:
Jika ada yang khawatir tentang poin Vitaly, Anda dapat mencoba beberapa cropping dan mengubah ukuran pada jfiddle yang berfungsi.
sumber
Dalam pengalaman saya, contoh ini telah menjadi solusi terbaik untuk mengunggah gambar yang diubah ukurannya: https://zocada.com/compress-resize-images-javascript-browser/
Ini menggunakan fitur Kanvas HTML5.
Kode ini sesederhana ini:
Hanya ada satu kelemahan dengan opsi ini, dan ini terkait dengan rotasi gambar, karena mengabaikan data EXIF. Yang sedang saya kerjakan saat ini. Akan diperbarui setelah saya selesai dengan itu.
Kelemahan lain, adalah kurangnya dukungan musuh IE / Edge, yang saya kerjakan juga. Meskipun ada informasi di tautan di atas. Untuk kedua masalah tersebut.
sumber