需求:
小程序上传图片压缩到 1M 以内
尝试:
选择图片后判断图片大小,大于 1M 调用 canvas 方法压缩图片,递归调用判断方法,直到图片小于 1M
问题:
第一次调用 canvas 的 canvasToTempFilePath 方法图片压缩正常,之后递归调用,图片大小未正常压缩,出现增大情况
有什么好的方法处理图片压缩到指定范围内
代码:
// 判断图片大小
async calcImage(path) {
// 获取图片大小
const size = await this.getFileInfo(path)
if (size > (1 * 1024 * 1024)) {
// 获取图片信息
const imageInfo = await this.getImageInfo(path)
this.w = imageInfo.width + 'px'
this.h = imageInfo.height + 'px'
const newpath = await this.getCanvasImage(path, this.w, this.h)
return this.calcImage(newpath)
} else {
return Promise.resolve(path)
}
},
// 图片压缩
getCanvasImage(path, w, h, mark) {
return new Promise((resovle, reject) => {
let ctx = uni.createCanvasContext('canvasId')
ctx.drawImage(path, 0, 0, w, h)
ctx.draw(false, () => {
uni.canvasToTempFilePath({
canvasId: 'canvasId',
fileType: 'jpg',
quality: 0.9,
success: (res) => {
resovle(res.tempFilePath)
},
fail: () => {
reject(path)
}
})
})
})
},
1 个回复
FullStack - 【插件开发】【专治疑难杂症】【ios上架、马甲包、白包、过审、已成功上架过几百个】【多款插件已上架:https://ext.dcloud.net.cn/publisher?id=22130】【非诚勿扰】QQ:543610866
可以解决