Mặc dù một số đoạn mã ngắn và hiệu quả, nhưng chúng không hề tầm thường để làm theo và hiểu được.
Vì tôi không phải là người thích "sao chép-dán" từ stack-tràn, tôi muốn các nhà phát triển hiểu mã mà họ đang đẩy vào phần mềm của họ, hy vọng bạn sẽ thấy những điều dưới đây hữu ích.
DEMO : Thay đổi kích thước hình ảnh với JS và HTML Canvas Demo fiddler.
Bạn có thể tìm thấy 3 phương pháp khác nhau để thực hiện việc thay đổi kích thước này, điều này sẽ giúp bạn hiểu cách mã hoạt động và tại sao.
https://jsfiddle.net/1b68eLdr/93089/
Bạn có thể tìm thấy mã đầy đủ của cả bản demo và phương thức TypeScript mà bạn có thể muốn sử dụng trong mã của mình trong dự án GitHub.
https://github.com/eyalc4/ts-image-resizer
Đây là mã cuối cùng:
export class ImageTools {
base64ResizedImage: string = null;
constructor() {
}
ResizeImage(base64image: string, width: number = 1080, height: number = 1080) {
let img = new Image();
img.src = base64image;
img.onload = () => {
if(img.height <= height && img.width <= width) {
this.base64ResizedImage = base64image;
}
else {
if(img.height > img.width) {
width = Math.floor(height * (img.width / img.height));
}
else {
height = Math.floor(width * (img.height / img.width));
}
let resizingCanvas: HTMLCanvasElement = document.createElement('canvas');
let resizingCanvasContext = resizingCanvas.getContext("2d");
resizingCanvas.width = img.width;
resizingCanvas.height = img.height;
resizingCanvasContext.drawImage(img, 0, 0, resizingCanvas.width, resizingCanvas.height);
let curImageDimensions = {
width: Math.floor(img.width),
height: Math.floor(img.height)
};
let halfImageDimensions = {
width: null,
height: null
};
while (curImageDimensions.width * 0.5 > width) {
halfImageDimensions.width = Math.floor(curImageDimensions.width * 0.5);
halfImageDimensions.height = Math.floor(curImageDimensions.height * 0.5);
resizingCanvasContext.drawImage(resizingCanvas, 0, 0, curImageDimensions.width, curImageDimensions.height,
0, 0, halfImageDimensions.width, halfImageDimensions.height);
curImageDimensions.width = halfImageDimensions.width;
curImageDimensions.height = halfImageDimensions.height;
}
let outputCanvas: HTMLCanvasElement = document.createElement('canvas');
let outputCanvasContext = outputCanvas.getContext("2d");
outputCanvas.width = width;
outputCanvas.height = height;
outputCanvasContext.drawImage(resizingCanvas, 0, 0, curImageDimensions.width, curImageDimensions.height,
0, 0, width, height);
this.base64ResizedImage = outputCanvas.toDataURL('image/jpeg', 0.85);
}
};
}}