使用canvas实现图片压缩

20 篇文章 0 订阅
1 篇文章 0 订阅

原文链接 https://segmentfault.com/a/1190000009308553

那,首先通过URL.createObjectURL(file)从file对象直接取得了图片的地址

前面就不详细说了,开始压缩咯 ( ´ ▽ ` )ノ

噢,有个注意点:

每次调用createObjectURL的时候,一个新的URL对象就被创建了,即使是同一个file对象,也会创建一个新对URL对象,所以,为了最佳性能和内存使用,当不再需要这个对象的时候要URL.revokeObjectURL()释放它。

开始压缩

创建一个compressImage函数,将之图片的地址url作参数传入:

	compressImage (url) {
		let cvs = document.createElement('canvas')
		let ctx = cvs.getContext('2d')
		let img = new window.Image()
		img.src = url
		img.onload = () => {
			cvs.width = img.width
			cvs.height = img.height
			setTimeout(() => {
				ctx.drawImage(img, 0, 0, cvs.width, cvs.height)
				this.newImageData = cvs.toDataURL('image/jpeg', 0.1)
		    }, 0)
		    this.showPreviewer = true
		}
	}

这里说说

canvas.toDataURL(type, encoderOptions)
HTMLCanvasElement.toDataURL()方法接受两个参数,typeencoderOptions

type是可选的,图片格式,默认是 image/pngencoderOptions表示图片质量, 在typeimage/jpegimage/webp时可以从 0 到 1 的区间内选择图片的质量。如果超出取值范围,将会使用默认值 0.92。其他参数会被忽略。

toDataURL()返回的是base64字符串,如果要转成2进制

	convertToBinary (dataURI) {
		let byteString = window.atob(dataURI.split(',')[1])
		let ab = new ArrayBuffer(byteString.length)
		let ia = new Uint8Array(ab)
		for (let i = 0; i < byteString.length; i++) {
			ia[i] = byteString.charCodeAt(i)
		}
		let bb = new window.Blob([ ab ])
		return bb
	}

测试结果:由iphone6所拍摄的图片上传,由平均1.9M左右压缩至170k

・゜゚・:.。…。.:・’(゚▽゚)’・:.。. .。.:・゜゚・

再见
5月5日发布


如果我的文章有帮上什么忙并且您也愿意赏个脸 就扫码领个红包吧(~ ̄▽ ̄)~

在这里插入图片描述

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值