js+canvas 实现图片压缩

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
	</head>
	<body>
		<input type="file" onchange="getImg(this)"/>
		<img src="" id="img"  >
		<script>
			function getImg(e){
				let [file] = e.files
				let render = new FileReader()
				render.readAsDataURL(file)
				render.onload = res => {
					// console.log(res.target.result)
					let {result} = res.target
					img.src = result// 讲 base64 文件流付给img
					img.onload = res => {
					  let re = new Blob([result], {type:'image/jpeg'})
					  console.log(re.size/1024)
					  if(re.size > (1024 * 1024)) {
						  result = compression(img)
						  img.src = result
					  }
					}
					render = null // 清空
				}
				render.onerror = err => {
					console.log('上传失败', err)
				}
			}
			
			// 图片压缩
			function compression(image) { 
				let canvas = document.createElement('canvas')
				canvas.width = img.naturalWidth
				canvas.height = img.naturalHeight
				canvas.setAttribute('id', 'ctx')
				let ctx = canvas.getContext("2d");
				let multiple = (1024 * 1024) / (img.naturalWidth * img.naturalHeight) // 压缩倍率,保证压缩在小于1MB
				multiple = multiple > 0.8 ? 0.8 : multiple
				ctx.drawImage(image, 0, 0, img.naturalWidth, img.naturalHeight)
				return canvas.toDataURL('image/jpeg', multiple) // 压缩后的图片的文件流
			}
		</script>
	</body>
</html>

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值