刚开始工作接手一个项目,选择图片使用的是wx.chooseImage,要加限制图片大小的功能。console.log了一下发现success的回调函数中没有返回图片的大小,一般使用uni.chooseImage不是应该都返回一个有关图片大小的参数 size吗? 这可给我弄得有点束手无措。通过大佬指点后恍然大悟,话不多说直接上代码。
通过wx.chooseImage上传图片会返回一个图片的地址localIds (这是一个数组)。
通过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;
}
},
})
}
})
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);
},
简单分享一下小白日常出的各种困难错误,不喜勿喷!