diff --git a/packages/uni-app-plus/src/service/api/media/chooseImage.ts b/packages/uni-app-plus/src/service/api/media/chooseImage.ts index be61a0c40dcdd5e0325e050f187fc82a2bd819e5..21712424d2ec6954fd8216a451b28312908dd904 100644 --- a/packages/uni-app-plus/src/service/api/media/chooseImage.ts +++ b/packages/uni-app-plus/src/service/api/media/chooseImage.ts @@ -1,5 +1,6 @@ import { TEMP_PATH } from '../constants' import { warpPlusErrorCallback } from '../../../helpers/plus' +import { getFileName } from '../../../helpers/file' import { API_TYPE_CHOOSE_IMAGE, API_CHOOSE_IMAGE, @@ -26,6 +27,30 @@ function getFileInfo(filePath: string): Promise { }) } +function compressImage(tempFilePath: string): Promise { + const dst = `${TEMP_PATH}/compressed/${Date.now()}_${getFileName( + tempFilePath + )}` + return new Promise((resolve) => { + plus.nativeUI.showWaiting() + plus.zip.compressImage( + { + src: tempFilePath, + dst, + overwrite: true, + }, + () => { + plus.nativeUI.closeWaiting() + resolve(dst) + }, + () => { + plus.nativeUI.closeWaiting() + resolve(tempFilePath) + } + ) + }) +} + type File = { path: string size: number @@ -61,11 +86,33 @@ export const chooseImage = defineAsyncApi( function openCamera() { const camera = plus.camera.getCamera() - camera.captureImage((path) => successCallback([path]), errorCallback, { - filename: TEMP_PATH + '/camera/', - resolution: 'high', - crop, - }) + camera.captureImage( + (path) => { + // fix By Lxh 暂时添加拍照压缩逻辑,等客户端增加逻辑后修改 + // 判断是否需要压缩 + if (sizeType && sizeType.includes('compressed')) { + return getFileInfo(path) + .then(({ size }) => { + // 压缩阈值 0.5 兆 + const THRESHOLD = 1024 * 1024 * 0.5 + return size && size > THRESHOLD + ? compressImage(path).then((dstPath) => + successCallback([dstPath]) + ) + : successCallback([path]) + }) + .catch(errorCallback) + } + + return successCallback([path]) + }, + errorCallback, + { + filename: TEMP_PATH + '/camera/', + resolution: 'high', + crop, + } + ) } function openAlbum() {