На мій досвід, цей приклад став найкращим рішенням для завантаження зміненого зображення: https://zocada.com/compress-resize-images-javascript-browser/
Він використовує функцію HTML5 Canvas.
Код такий же простий, як і цей:
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);
};
}
У цього варіанта є лише один недолік, і це пов'язано з обертанням зображення через ігнорування даних EXIF. Над яким я зараз працюю. Оновиться, коли я закінчу з цим.
Ще один недолік - це відсутність супротивника IE / Edge, над яким я також працюю. Хоча інформація є у вищенаведеному посиланні. Для обох питань.