From b00fca281d3d04fd67765ff8073389f84f1e5d95 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BE=90=E5=8B=A4=E6=B0=91?= Date: Sat, 9 Nov 2024 18:56:59 +0800 Subject: [PATCH] =?UTF-8?q?feat(ContactSupportView):=20=E6=B7=BB=E5=8A=A0?= =?UTF-8?q?=E4=BF=9D=E5=AD=98=E5=9B=BE=E7=89=87=E5=88=B0=E6=9C=AC=E5=9C=B0?= =?UTF-8?q?=E7=9A=84=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 在 ContactSupportView 组件中添加保存图片按钮 - 实现保存图片到本地的逻辑 - 更新权限请求,添加对相册的访问权限 - 优化界面布局,调整图片显示和按钮样式 --- src/main/ets/utils/FileHelper.ets | 37 +++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) diff --git a/src/main/ets/utils/FileHelper.ets b/src/main/ets/utils/FileHelper.ets index bc26baa..991133a 100644 --- a/src/main/ets/utils/FileHelper.ets +++ b/src/main/ets/utils/FileHelper.ets @@ -6,6 +6,9 @@ import { hilog } from '@kit.PerformanceAnalysisKit'; import { image } from '@kit.ImageKit'; import { buffer } from '@kit.ArkTS'; import { LogHelper } from './LogHelper'; +import { ToolsHelper } from './ToolsHelper'; +import { photoAccessHelper } from '@kit.MediaLibraryKit'; +import { GlobalContext } from '../ContextConfig'; export class FileHelper { private constructor() { @@ -311,6 +314,11 @@ export class FileHelper { return fs.accessSync(path); } + /** + * 图片转base64 + * @param photoUri + * @returns + */ static BmpToBase64(photoUri: string): Promise { const imagePackerApi: image.ImagePacker = image.createImagePacker(); const packOpts: image.PackingOption = { format: 'image/jpeg', quality: 100 }; @@ -336,6 +344,35 @@ export class FileHelper { }) } + /** + * 保存图片到相册,需要注意权限 + * @param pixmap + */ + static async saveImage(pixmap: image.PixelMap) { + let imageBuffer: ArrayBuffer = new ArrayBuffer(1) + try { + imageBuffer = await image.createImagePacker().packing(pixmap, { format: "image/png", quality: 100 }) + } catch (err) { + ToolsHelper.showMessage('保存失败') + console.error(`Invoke packingPixelMap2Jpg failed, err: ${JSON.stringify(err)}`) + } + + const uri = await photoAccessHelper.getPhotoAccessHelper(GlobalContext.getContext()) + .createAsset(photoAccessHelper.PhotoType.IMAGE, 'png') + + fs.open(uri, fs.OpenMode.READ_WRITE | fs.OpenMode.CREATE) + .then(async (file) => { + try { + await fs.write(file.fd, imageBuffer) + ToolsHelper.showMessage('保存成功') + } finally { + await fs.close(file.fd) // 确保文件关闭 + } + }).catch(() => { + ToolsHelper.showMessage('保存失败') + }) + } + /** * 打开文件,支持使用URI打开文件。使用Promise异步回调。 * @param path string 文件的应用沙箱路径或URI。