From 506d25f7d05dd43adc08fb5eb2472d165c4b6bee Mon Sep 17 00:00:00 2001 From: DCloud_LXH <283700113@qq.com> Date: Fri, 3 Dec 2021 17:19:38 +0800 Subject: [PATCH] fix(app): canvasToTempFilePath fixed #2970 --- packages/uni-app-plus/src/platform/index.ts | 8 +--- .../uni-app-plus/src/platform/saveImage.ts | 47 +++++++++++++++++++ 2 files changed, 49 insertions(+), 6 deletions(-) create mode 100644 packages/uni-app-plus/src/platform/saveImage.ts diff --git a/packages/uni-app-plus/src/platform/index.ts b/packages/uni-app-plus/src/platform/index.ts index eef2a250c..d1d52530d 100644 --- a/packages/uni-app-plus/src/platform/index.ts +++ b/packages/uni-app-plus/src/platform/index.ts @@ -15,15 +15,11 @@ export { removeMediaQueryObserver, } from '../service/api/ui/mediaQueryObserver' -export function saveImage( - base64: string, - dirname: string, - callback: (error: Error | null, tempFilePath: string) => void -) {} +export { saveImage } from './saveImage' export function getSameOriginUrl(url: string): Promise { return Promise.resolve(url) } -export const TEMP_PATH = '' +export { TEMP_PATH } from '../service/api/constants' export { getEnterOptions, diff --git a/packages/uni-app-plus/src/platform/saveImage.ts b/packages/uni-app-plus/src/platform/saveImage.ts new file mode 100644 index 000000000..e1bf8cf39 --- /dev/null +++ b/packages/uni-app-plus/src/platform/saveImage.ts @@ -0,0 +1,47 @@ +let index = 0 + +type Format = 'jpg' | 'png' | undefined + +export function saveImage( + base64: string, + dirname: string, + callback: (error: Error | null, tempFilePath?: string) => void +) { + const id = `${Date.now()}${index++}` + const bitmap = new plus.nativeObj.Bitmap!(`bitmap${id}`) + bitmap.loadBase64Data( + base64, + function () { + const base64Match = base64.match(/data:image\/(\S+?);/) || [null, 'png'] + let format + if (base64Match[1]) { + format = base64Match[1].replace('jpeg', 'jpg') as Format + } + const tempFilePath = `${dirname}/${id}.${format}` + bitmap.save( + tempFilePath, + { + overwrite: true, + quality: 100, + format, + }, + function () { + clear() + callback(null, tempFilePath) + }, + function (error) { + clear() + callback(error) + } + ) + }, + function (error) { + clear() + callback(error) + } + ) + + function clear() { + bitmap.clear() + } +} -- GitLab