Ini penggaruk mie.
Mengingat kami memiliki penyimpanan lokal HTML5 dan xhr v2 dan apa yang tidak. Saya bertanya-tanya apakah ada yang bisa menemukan contoh kerja atau bahkan hanya memberi saya ya atau tidak untuk pertanyaan ini:
Apakah mungkin untuk pra-ukuran gambar menggunakan penyimpanan lokal baru (atau apa pun), sehingga pengguna yang tidak memiliki petunjuk tentang mengubah ukuran gambar dapat menyeret gambar 10mb mereka ke situs web saya, itu mengubah ukurannya menggunakan penyimpanan lokal baru dan MAKA unggah dengan ukuran lebih kecil.
Saya tahu betul Anda dapat melakukannya dengan Flash, applet Java, X aktif ... Pertanyaannya adalah apakah Anda dapat melakukannya dengan Javascript + Html5.
Menantikan tanggapan yang satu ini.
Ta untuk saat ini.
sumber
onload
pada gambar (lampirkan handler sebelum pengaturansrc
), karena browser diperbolehkan untuk melakukan decoding secara asinkron dan piksel mungkin tidak tersedia sebelumnyadrawImage
.ctx.drawImage()
mendekati akhir.Saya mengatasi masalah ini beberapa tahun yang lalu dan mengunggah solusi saya ke github sebagai https://github.com/rossturner/HTML5-ImageUploader
jawaban robertc menggunakan solusi yang diusulkan dalam posting blog Mozilla Hacks , namun saya menemukan ini memberikan kualitas gambar yang sangat buruk ketika mengubah ukuran ke skala yang bukan 2: 1 (atau beberapa darinya). Saya mulai bereksperimen dengan algoritme pengubahan ukuran gambar yang berbeda, meskipun sebagian besar pada akhirnya cukup lambat atau kualitasnya tidak terlalu bagus.
Akhirnya saya datang dengan solusi yang saya percaya dijalankan dengan cepat dan memiliki kinerja yang sangat bagus juga - sebagai solusi Mozilla menyalin dari 1 kanvas ke karya lain dengan cepat dan tanpa kehilangan kualitas gambar pada rasio 2: 1, diberikan target x piksel lebar dan tinggi piksel y , saya menggunakan metode pengubahan ukuran kanvas ini sampai gambar berada di antara x dan 2 x , dan y dan 2 y . Pada titik ini saya kemudian beralih ke pengubahan ukuran gambar algoritmik untuk "langkah" akhir pengubahan ukuran ke ukuran target. Setelah mencoba beberapa algoritma yang berbeda, saya memilih interpolasi bilinear yang diambil dari blog yang tidak online lagi tetapi dapat diakses melalui Internet Archive, yang memberikan hasil yang baik, inilah kode yang berlaku:
Ini skala gambar ke lebar
config.maxWidth
, mempertahankan rasio aspek asli. Pada saat pengembangan ini bekerja pada iPad / iPhone Safari selain browser desktop utama (IE9 +, Firefox, Chrome) jadi saya berharap ini akan tetap kompatibel mengingat penggunaan HTML5 yang lebih luas saat ini. Perhatikan bahwa panggilan canvas.toDataURL () menggunakan tipe mime dan kualitas gambar yang akan memungkinkan Anda untuk mengontrol kualitas dan format file output (berpotensi berbeda untuk input jika Anda mau).Satu-satunya hal yang tidak dibahas adalah mempertahankan informasi orientasi, tanpa sepengetahuan metadata ini, gambar diubah ukurannya dan disimpan apa adanya, kehilangan metadata apa pun di dalam gambar untuk orientasi yang berarti bahwa gambar yang diambil pada perangkat tablet "terbalik" adalah ditampilkan seperti itu, meskipun mereka akan terbalik di jendela bidik kamera perangkat. Jika ini yang menjadi perhatian, posting blog ini memiliki panduan dan contoh kode yang baik tentang bagaimana mencapainya, yang saya yakin dapat diintegrasikan dengan kode di atas.
sumber
Koreksi ke atas:
sumber
dataurl
tidak ada.img.width
danimg.height
awalnya mereka0
. Anda harus memasukkan sisa fungsi ke dalamimg.addEventListener('load', function () { // now the image has loaded, continue... });
Modifikasi ke jawaban oleh Justin yang bekerja untuk saya:
sumber
Jika Anda tidak ingin menemukan kembali roda Anda dapat mencoba plupload.com
sumber
Naskah
sumber
Ini tidak akan berfungsi. Di sisi PHP Anda tidak dapat menyimpan file dengan ini.
Gunakan kode ini sebagai gantinya:
sumber
Mengubah ukuran gambar dalam elemen kanvas umumnya ide buruk karena menggunakan interpolasi kotak termurah. Gambar yang dihasilkan terlihat menurun kualitasnya. Saya akan merekomendasikan menggunakan http://nodeca.github.io/pica/demo/ yang dapat melakukan transformasi Lanczos sebagai gantinya. Halaman demo di atas menunjukkan perbedaan antara pendekatan kanvas dan Lanczos.
Ini juga menggunakan pekerja web untuk mengubah ukuran gambar secara paralel. Ada juga implementasi WEBGL.
Ada beberapa resizer gambar online yang menggunakan pica untuk melakukan pekerjaan itu, seperti https://myimageresizer.com
sumber
Jawaban yang diterima bekerja dengan baik, tetapi logika pengubahan ukuran mengabaikan kasus di mana gambar lebih besar daripada maksimum hanya dalam satu sumbu (misalnya, tinggi> maxHeight tetapi lebar <= maxWidth).
Saya pikir kode berikut menangani semua kasus dengan cara yang lebih mudah dan fungsional (abaikan anotasi jenis naskah jika menggunakan javascript biasa):
sumber
Anda dapat menggunakan dropzone.js jika Anda ingin menggunakan pengelola unggahan yang sederhana dan mudah dengan pengubahan ukuran sebelum fungsi unggahan.
Ini memiliki fungsi pengubahan ukuran bawaan, tetapi Anda dapat menyediakannya sendiri jika diinginkan.
sumber