From 14f3378e179250d9b142771daebf041c59fdd1ef Mon Sep 17 00:00:00 2001 From: tianjiaxing Date: Mon, 28 Jun 2021 11:46:21 +0800 Subject: [PATCH] feat(App): compressImage --- packages/uni-api/src/index.ts | 1 + .../src/protocols/media/compressImage.ts | 19 +++++++++++ .../uni-app-plus/src/service/api/index.ts | 1 + .../src/service/api/media/compressImage.ts | 32 +++++++++++++++++++ 4 files changed, 53 insertions(+) create mode 100644 packages/uni-api/src/protocols/media/compressImage.ts create mode 100644 packages/uni-app-plus/src/service/api/media/compressImage.ts diff --git a/packages/uni-api/src/index.ts b/packages/uni-api/src/index.ts index 3cb359d98..4f5b847ba 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 000000000..e8e48d134 --- /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 87c682dbb..19de2e81d 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 000000000..148c4a372 --- /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 +) -- GitLab