diff --git a/packages/uni-api/src/index.ts b/packages/uni-api/src/index.ts index 3cb359d986de22c4d5b8c5765b9af3594c60cc0a..4f5b847baf0be8c96d89f4479663c9bd999edd9a 100644 --- a/packages/uni-api/src/index.ts +++ b/packages/uni-api/src/index.ts @@ -53,6 +53,7 @@ export * from './protocols/media/getVideoInfo' export * from './protocols/media/saveImageToPhotosAlbum' export * from './protocols/media/saveVideoToPhotosAlbum' export * from './protocols/media/getRecorderManager' +export * from './protocols/media/compressImage' export * from './protocols/network/request' export * from './protocols/network/downloadFile' diff --git a/packages/uni-api/src/protocols/media/compressImage.ts b/packages/uni-api/src/protocols/media/compressImage.ts new file mode 100644 index 0000000000000000000000000000000000000000..e8e48d1344742760f902db08e0e8e7d66eb6c9a5 --- /dev/null +++ b/packages/uni-api/src/protocols/media/compressImage.ts @@ -0,0 +1,19 @@ +import { getRealPath } from '@dcloudio/uni-platform' + +export const API_COMPRESS_IMAGE = 'compressImage' +export type API_TYPE_COMPRESS_IMAGE = typeof uni.compressImage + +export const CompressImageOptions: ApiOptions = { + formatArgs: { + src(src, params) { + params.src = getRealPath(src) + }, + }, +} + +export const CompressImageProtocol: ApiProtocol = { + src: { + type: String, + required: true, + }, +} diff --git a/packages/uni-app-plus/src/service/api/index.ts b/packages/uni-app-plus/src/service/api/index.ts index 87c682dbb0485ce61347e43c95e01964229d0b06..19de2e81d5ecf495518cfa9c195548178430b7cd 100644 --- a/packages/uni-app-plus/src/service/api/index.ts +++ b/packages/uni-app-plus/src/service/api/index.ts @@ -17,6 +17,7 @@ export * from './media/previewImage' export * from './media/getRecorderManager' export * from './media/saveVideoToPhotosAlbum' export * from './media/saveImageToPhotosAlbum' +export * from './media/compressImage' export * from './keyboard/keyboard' diff --git a/packages/uni-app-plus/src/service/api/media/compressImage.ts b/packages/uni-app-plus/src/service/api/media/compressImage.ts new file mode 100644 index 0000000000000000000000000000000000000000..148c4a3720db2d39da24ee075683841710ac6ea7 --- /dev/null +++ b/packages/uni-app-plus/src/service/api/media/compressImage.ts @@ -0,0 +1,32 @@ +import { extend } from '@vue/shared' +import { getFileName } from '../../../helpers/file' +import { TEMP_PATH } from '../constants' +import { + API_COMPRESS_IMAGE, + API_TYPE_COMPRESS_IMAGE, + defineAsyncApi, + CompressImageOptions, + CompressImageProtocol, +} from '@dcloudio/uni-api' + +export const compressImage = defineAsyncApi( + API_COMPRESS_IMAGE, + (options, { resolve, reject }) => { + const dst = `${TEMP_PATH}/compressed/${Date.now()}_${getFileName( + options.src + )}` + plus.zip.compressImage( + extend({}, options, { + dst, + }), + () => { + resolve({ + tempFilePath: dst, + }) + }, + reject + ) + }, + CompressImageProtocol, + CompressImageOptions +)