H5js前端压缩图片

2 篇文章 0 订阅
1 篇文章 0 订阅

1.压缩图片是通过canvas做到的。

具体原理【1】先获取图片的原始尺寸【2】确定压缩后的图片尺寸,(就是将图片尺寸都缩小达到压缩目的)【3】在canvas画布上重新画一遍这个缩小后尺寸的图片【4】把该图片转为blob格式进行发送或者其他进一步的处理。其中successF为成功后的回调函数。该方法是在uni-app中用的,所以先用的uni.getImageInfo获取原本的图片尺寸。这里需要注意的是,如果没有采用ctx.drawImage(img, 0, 0, canvasWidth, canvasHeight);这一步重画图片,直接到把canvas转为blob格式,会出现图片是全黑色的。必须通过drawImage方法重新绘制图片,才能得到压缩后的图片信息。

代码如下

xport function handleImage(src,type,successF){
    uni.getImageInfo({
            src: src,
            success: function (res) {
              let canvasWidth = res.width //图片原始长宽
              let canvasHeight = res.height;
              let base = canvasWidth/canvasHeight;
              if(canvasWidth>500){
                  canvasWidth = 500;
                  canvasHeight = Math.floor(canvasWidth/base);
              }
              //进行压缩
              let canvas = document.createElement('canvas');
              let ctx = canvas.getContext('2d');
              canvas.width = canvasWidth;
              canvas.height = canvasHeight;
              let img = new Image();
              img.src = src; // 要压缩的图片  
              //重画这个图片
              ctx.drawImage(img, 0, 0, canvasWidth, canvasHeight);
              //转为blob格式发送
              canvas.toBlob( function(blob) {
                 const blobUrl = URL.createObjectURL(blob)
                 console.log("压缩后的bloburl:"+blobUrl)
                 successF(blobUrl)
              }, 'image/jpeg');
              },
              fail: (err) => {
                  reject('获取图片信息失败')
              }
              })
}

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值