关于使用wx.chooseImage怎样限制图片大小?

刚开始工作接手一个项目,选择图片使用的是wx.chooseImage,要加限制图片大小的功能。console.log了一下发现success的回调函数中没有返回图片的大小,一般使用uni.chooseImage不是应该都返回一个有关图片大小的参数 size吗? 这可给我弄得有点束手无措。通过大佬指点后恍然大悟,话不多说直接上代码。

  1. 通过wx.chooseImage上传图片会返回一个图片的地址localIds (这是一个数组)。

  1. 通过wx.getLocalImgData将有关图片地址当做参数,也就是第一步的localIds(如果有多张图片,需要通过循环将图片的地址依次取出)。

wx.chooseImage({
        count: 1, // 默认9
        sizeType: ['original'], // 可以指定是原图还是压缩图,默认二者都有
        sourceType:['camera','album'], // 可以指定来源是相册还是相机,默认二者都有
        quality: 0.8, //压缩质量,范围0~1,数值越小,质量越低,压缩率越高(仅对jpg有效)
        success: (res) => {
            console.log(res);  //此时返回的res里会有一个localIds数组,存储的是图片地址
            wx.getLocalImgData({
                  localId: res.localIds[0],//因为我只需要一张图片所以我这里直接取出
                  success: (newBackData) => {
                  console.log("获取图片路径")
                  let upimgurl = (newBackData.localData.toString().indexOf('data:image/') > -1) ? newBackData.localData : "data:image/jpeg;base64," + newBackData.localData;
            if(this.base64ImageSize(upimgurl) > 1 || this.base64ImageSize(upimgurl)< 0.02){
                  console.log("图片大小检测完成")
                  uni.showToast({
                  icon:'none',
                  title:"上传图片要大于20K小于1M"
                  })
                 return;
            }
            },
        })
        }
    })
        
  1. wx.getLocalImgData只是帮助你根据wx.chooseImage提供的地址获取都图片的base64格式,要想得到图片的大小还需要通过计算。

// 获取base64图片大小
            base64ImageSize(base64ImageStr) {
              const indexBase64 = base64ImageStr.indexOf('base64,');
              if (indexBase64 < 0) return -1;
              const str = base64ImageStr.substr(indexBase64 + 6);
              return (str.length * 0.75 / 1024 / 1024).toFixed(2);
            },

简单分享一下小白日常出的各种困难错误,不喜勿喷!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值