s***@126.com
s***@126.com
  • 发布:2022-06-21 13:08
  • 更新:2022-06-21 16:47
  • 阅读:973

uniapp 小程序图片压缩问题

分类:uni-app

需求:
小程序上传图片压缩到 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)  
                            }  
                        })  
                    })  
                })  
            },
2022-06-21 13:08 负责人:无 分享
已邀请:
FullStack

FullStack - 【插件开发】【专治疑难杂症】【ios上架、马甲包、白包、过审、已成功上架过几百个】【多款插件已上架:https://ext.dcloud.net.cn/publisher?id=22130】【非诚勿扰】QQ:543610866

可以解决

该问题目前已经被锁定, 无法添加新回复