一、背景
我们有个人脸识别门闸的功能,小程序上上传人脸照片,然后门闸识别人脸开门。图片大小要在在200kb,但是也不能压缩的太小,因为大小有可能识别不到或者要走很近才能识别。所以选择递归的方式实现图片的压缩。
二、代码实现
toTakePhoto(){wx.chooseMedia({count: 1,mediaType: ['image'],sourceType: ['album', 'camera'],sizeType: ['compressed'],success: (res) => {console.log(res, 111)wx.showLoading({title: '图片上传中',})let tempFile = res.tempFiles && res.tempFiles[0] ? res.tempFiles[0] : ""let Filesize = tempFile.size / 1024 //文件大小默认为B换算为KBif (tempFile.tempFilePath) {this.setData({"form.visitor_img": ""})console.log(Filesize, "Filesize")if (Filesize && Filesize < 200) {this.toCheckPhoto(tempFile.tempFilePath)} else {this.compressImage(tempFile.tempFilePath)}}}})},compressImage(tempFilePath, quality = 100) {wx.compressImage({src: tempFilePath,compressedHeight: 432,compressedWidth: 352,quality,success: (re) => {console.log('compressImage-----', re);console.log(quality, "quality")if (this.isPhotoSizeOk(re.tempFilePath)) {this.toCheckPhoto(re.tempFilePath)} else {if (quality > 0) {this.compressImage(tempFilePathh, quality - 10)} else {//确定提交if (!this.isPhotoSizeOk(re.tempFilePath)) {wx.showToast({title: "图片需小于200k",icon: "none"})}}}},fail: (err) => {console.log('compressImage-----fail', err);this.isPhotoSizeOk(re.tempFilePath)}})},