提交 073d3134 编写于 作者: D DCloud_LXH

fix(App): chooseImage camera.captureImage add compression logic

上级 d929a7e2
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<PlusIoMetadata> {
})
}
function compressImage(tempFilePath: string): Promise<string> {
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<API_TYPE_CHOOSE_IMAGE>(
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() {
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册