前端实现图片压缩

<!DOCTYPE html>
<html lang="en">

<head>
	<meta charset="UTF-8">
	<meta name="viewport" content="width=device-width, initial-scale=1.0">
	<title>图片压缩</title>
</head>

<body>
	<input type="file" name="file" id="file">
</body>
<script>
	const input = document.getElementById('file');
	input.onchange = e => {
		const fileReader = new FileReader();
		if (e.target.files && e.target.files[0]);
		const file = e.target.files[0];
		console.log(
			`name:${file.name}\n`,
			`type:${file.type}\n`,
			`size:${file.size}\n`,
		)
		// 把图片读成dataURL
		fileReader.readAsDataURL(e.target.files[0]);
		fileReader.onload = fileEvent => {
			if (fileEvent && fileEvent.target && fileEvent.target.result) {
				const img = new Image();
				img.src = fileEvent.target.result;
				img.onload = () => {
					const canvas = document.createElement('canvas');
					const ctx = canvas.getContext('2d');
					// 压缩有2中方式:
					// 第一种只支持image/webp和image/jpeg格式,
					// 将canvas的宽高设置成和原图一样,通过toBlob(cb,type,quality)的quality参数压缩;

					// 第二种就是改变图片的宽和高.
					const quality = 0.7;
					canvas.width = quality * img.width;
					canvas.height = quality * img.height;
					ctx.drawImage(img, 0, 0, canvas.width, canvas.height) // 将图片绘制在画板上
					canvas.toBlob(blob => {
						console.log(`new file size: ${blob.size}`)
						const url = URL.createObjectURL(blob);
						const a = document.createElement('a');
						document.body.appendChild(a);
						a.style.display = 'none';
						a.href = url;
						a.download = `${quality}quality-${file.name}`;
						a.click();
						window.URL.revokeObjectURL(url);
					})
				}
			}
		}
	}
</script>

</html>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值