如何使用Typescript调整图片的大小和裁剪

609 阅读1分钟

在这篇文章中,我将分享一个简单的Typescript代码段,你可以很容易地转换为Javascript,在不依赖任何第三方库的情况下调整图像大小和裁剪。

这个代码片断首先提示你使用HTMLInputElement选择一个本地图片。

一旦选择了图片,使用FileReaderAPI,它将图片加载到HTMLImageElement中,而不将其添加到HTML DOM中。

一旦图像从本地文件系统加载到HTMLImageElement中,我们就调用javascript函数

resizeAndSquareImage

这个函数对图像进行大小调整和裁剪,使其成为一个完美的正方形图像!

成方形的图像被写入HTMLCanvasElement

这里是HTML。

<html>
<body>

<label for="changeImage">Choose the image you want to square:</label>
<p/>
<input type="file"
       id="changeImage" name="changeImage"
       accept="image/png, image/jpeg" imgid="squaredImage" >
	
<p/>	
<canvas id="squaredImage"  url="/no-image-selected.jpg"  width="256" height="256"/>
<p/>
</body>
</html>

以及Javascript/Typescript代码。

let changeImage = function (evt: React.ChangeEvent<{ name?: string; value: unknown }>) {
    var tgt = evt.target || window.event.srcElement,
        files = tgt.files;

    // FileReader support
    if (FileReader && files && files.length) {
        var fr = new FileReader();
        fr.onload = function () {
			let targetCanvas = document.getElementById(evt.target.getAttribute("imgid"));
			resizeAndSquareImage(fr.result, targetCanvas);
        }
        fr.readAsDataURL(files[0]);
    }
}

function resizeAndSquareImage(imageUrl:string, targetCanvas:HTMLCanvasElement) {
    // this image will hold our source image data
    const inputImage:HTMLImageElement = new Image();
    console.log("resizeAndSquareImage called");
    // we want to wait for our image to load
    let result = inputImage.onload = () => {
	const imgSize:number = Math.min(inputImage.width, inputImage.height);
        const left:number = (inputImage.width - imgSize) / 2;
        const top:number = (inputImage.height - imgSize) / 2;
        const ctx:CanvasRenderingContext2D = targetCanvas.getContext("2d");
	ctx.drawImage(inputImage, left, top, imgSize, imgSize, 0, 0, targetCanvas.width, targetCanvas.height);
	  return targetCanvas;
     };
     inputImage.src = imageUrl;
     return result;
}


document.getElementById("changeImage").onchange = changeImage;

希望这篇简短的博文对你有用!