/** * * * 图片压缩 * * */ /** * 给的文件资源是否小于LimitSize (M), 小于走lessCallBack, 大于走moreCallBack */ export function imageSizeIsLessLimitSize( imagePath: string, limitSize: number, lessCallBack: () => void, moreCallBack: () => void ): void { uni.getFileInfo({ filePath: imagePath, success(res) { console.log("压缩前图片大小:", res.size / 1024, 'kb'); if (res.size > 1024 * 1024 * limitSize) { moreCallBack(); } else { lessCallBack(); } } }); } // 主调用方法 /** * 获取小于限制大小的Image, limitSize默认为1M,递归调用。 */ export function getLessLimitSizeImage( canvasId: string, imagePath: string, limitSize: number = 1, drawWidth: number, callBack: (path: string) => void ): void { imageSizeIsLessLimitSize(imagePath, limitSize, () => { callBack(imagePath); }, () => { uni.getImageInfo({ src: imagePath, success: function (imageInfo) { var maxSide = Math.max(imageInfo.width, imageInfo.height); //画板的宽高默认是windowWidth var windowW = drawWidth; var scale = 1; if (maxSide > windowW) { scale = windowW / maxSide; } var imageW = Math.floor(imageInfo.width * scale); var imageH = Math.floor(imageInfo.height * scale); console.log('调用压缩', imageW, imageH); getCanvasImage(canvasId, imagePath, imageW, imageH, (pressImgPath: string) => { getLessLimitSizeImage(canvasId, pressImgPath, limitSize, drawWidth * 0.7, callBack); } ); } }); } ); } /** * 获取画布图片 */ function getCanvasImage( canvasId: string, imagePath: string, imageW: number, imageH: number, getImgsuccess: (path: string) => void ): void { // TODO: UniApp 中 canvas 的使用方式与微信小程序不同,需要根据实际情况调整 // const ctx = uni.createCanvasContext(canvasId); // ctx.drawImage(imagePath, 0, 0, imageW, imageH); // ctx.draw(false, () => { // uni.canvasToTempFilePath({ // canvasId: canvasId, // x: 0, // y: 0, // width: imageW, // height: imageH, // quality: 1, // success(res) { // getImgsuccess(res.tempFilePath); // } // }); // }); console.warn('getCanvasImage 需要根据 UniApp 的 canvas API 进行调整'); }