HarmonyOS 鸿蒙Next 保存网络图片到手机图库?

发布于 1周前 作者 sinazl 最后一次编辑是 5天前 来自 鸿蒙OS

HarmonyOS 鸿蒙Next 保存网络图片到手机图库?

2 回复

参考以下demo:

import http from '[@ohos](/user/ohos).net.http';
import { BusinessError } from '[@ohos](/user/ohos).base';
import common from '[@ohos](/user/ohos).app.ability.common';
import photoAccessHelper from '[@ohos](/user/ohos).file.photoAccessHelper';
import fs from '[@ohos](/user/ohos).file.fs';
import promptAction from '[@ohos](/user/ohos).promptAction';

@Entry @Component export struct SaveNetWorkPictures { imageBuffer: ArrayBuffer | undefined = undefined; // 图片ArrayBuffer

async aboutToAppear(): Promise<void> { //请求网络图片 //this.getPicture(); }

build() { Column() { Column() { SaveButton({ icon: SaveIconStyle.FULL_FILLED }) .iconSize(60) .iconColor("#888888") .width(99) .height(99) .onClick(async () => { // if (this.imageBuffer !== undefined) { // await this.getPicture(); await this.saveImage(this.imageBuffer); promptAction.showToast({ message: ‘图片保存成功’, duration: 2000 }) // } }) } .height(‘100%’) .padding(100) } }

// * 通过http的request方法从网络下载图片资源 getPicture(): Promise<void> { return new Promise((resolve)=>{ http.createHttp()// 显示网络图片的地址 .request(‘https://gitee.com/harmonyos-cases/cases/raw/master/CommonAppDevelopment/feature/variablewatch/src/main/resources/base/media/variablewatch_grape.png’, (error: BusinessError, data: http.HttpResponse) => { if (error) { // 下载失败时弹窗提示检查网络,不执行后续逻辑 promptAction.showToast({ message: ‘图片加载失败,请检查网络’, duration: 2000 }) return; }

// this.transcodePixelMap(data); // 判断网络获取到的资源是否为ArrayBuffer类型 if (data.result instanceof ArrayBuffer) { this.imageBuffer = data.result as ArrayBuffer; } resolve(); } ) })

}

// * 保存ArrayBuffer到图库 async saveImage(buffer: ArrayBuffer | string | undefined): Promise<void> { if(this.imageBuffer == undefined ){ await this.getPicture() } try { const context = getContext(this) as common.UIAbilityContext; // 获取getPhotoAccessHelper需要的context const helper = photoAccessHelper.getPhotoAccessHelper(context); // 获取相册管理模块的实例 const uri = await helper.createAsset(photoAccessHelper.PhotoType.IMAGE, ‘jpg’); // 指定待创建的文件类型、后缀和创建选项,创建图片或视频资源 const file = await fs.open(uri, fs.OpenMode.READ_WRITE | fs.OpenMode.CREATE); await fs.write(file.fd, this.imageBuffer); await fs.close(file.fd); } catch (e) { console.log(JSON.stringify(e)) } } }<button style="position: absolute; padding: 4px 8px 0px; cursor: pointer; top: 8px; right: 8px; font-size: 14px;">复制</button>

HarmonyOS 鸿蒙Next保存网络图片到手机图库,可以按照以下步骤操作:

首先,需要在module.json5文件中配置必要的权限,包括ohos.permission.INTERNET(用于访问网络)和ohos.permission.WRITE_IMAGEVIDEO(用于写入图片到图库)。

其次,在代码中,可以使用http模块从网络上获取图片数据。获取到数据后,使用photoAccessHelper模块和fileIo(或fs)模块将图片数据写入到图库中。

具体实现时,需要注意以下几点:

  1. 检查并申请所需的权限。
  2. 使用http.createHttp().request方法获取网络图片数据。
  3. 将获取到的图片数据(通常是ArrayBuffer类型)转换为可保存的格式。
  4. 使用photoAccessHelper.getPhotoAccessHelper获取相册访问助手,并使用createAsset方法创建一个新的图片资产。
  5. 使用fileIo.open(或fs.open)打开创建的图片资产,并使用write方法将图片数据写入。
  6. 最后,使用close方法关闭文件。

如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html

回到顶部