Tecrübelerime göre, bu örnek yeniden boyutlandırılmış bir resmi yüklemek için en iyi çözüm olmuştur: https://zocada.com/compress-resize-images-javascript-browser/
HTML5 Canvas özelliğini kullanır.
Kod bu kadar 'basit':
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');
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);
};
}
Bu çözümün iki dezavantajı var.
İlki, EXIF verilerinin göz ardı edilmesinden dolayı görüntü döndürme ile ilgilidir. Bu sorunu çözemedim ve kullanım durumumda çok önemli değildim, ancak herhangi bir geri bildirim duymaktan memnuniyet duyarım.
İkinci dezavantaj, IE / Edge'e karşı destek eksikliği (Chrome tabanlı sürüm değil) ve buna hiç zaman ayırmayacağım.