一、背景
我们有个人脸识别门闸的功能,小程序上上传人脸照片,然后门闸识别人脸开门。图片大小要在在200kb,但是也不能压缩的太小,因为大小有可能识别不到或者要走很近才能识别。所以选择递归的方式实现图片的压缩。
二、代码实现
c
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换算为KB
if (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)
}
})
},