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:
compress(e) {
const fileName = e.target.files[0].name;
const reader = new FileReader();
reader.readAsDataURL(e.target.files[0]);
reader.onload = event => {
const img = new Image();
img.src = event.target.result;
img.onload = () => {
const elem = document.createElement('canvas');
const width = Math.min(800, img.width);
const scaleFactor = width / img.width;
elem.width = width;
elem.height = img.height * scaleFactor;
const ctx = elem.getContext('2d');
// img.width and img.height will contain the original dimensions
ctx.drawImage(img, 0, 0, width, img.height * scaleFactor);
ctx.canvas.toBlob((blob) => {
const file = new File([blob], fileName, {
type: 'image/jpeg',
lastModified: Date.now()
});
}, 'image/jpeg', 1);
},
reader.onerror = error => console.log(error);
};
}
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.