可以参考以下案例:import { http } from '@kit.NetworkKit'; import { promptAction } from '@kit.ArkUI'; import { BusinessError } from '@kit.BasicServicesKit'; import ResponseCode from '@ohos.net.http'; import { image } from '@kit.ImageKit'; import { photoAccessHelper } from '@kit.MediaLibraryKit'; import { common } from '@kit.AbilityKit'; import fs from '@ohos.file.fs'; @Entry @Component struct Index { @State imageBuffer: ArrayBuffer | undefined = undefined; // 图片ArrayBuffer @State image: PixelMap | undefined = undefined; @State photoAccessHelper: photoAccessHelper.PhotoAccessHelper | undefined = undefined; // 相册模块管理实例 async aboutToAppear(): Promise<void> { this.getPicture(); } build() { Row() { Column() { Image(this.image) .objectFit(ImageFit.Contain) .width('50%') SaveButton() .onClick(async () => { if (this.imageBuffer !== undefined) { await this.saveImage(this.imageBuffer); promptAction.showToast({ message: "成功", duration: 2000 }) } }) }.width('100%') }.height('100%') } /** * 通过http的request方法从网络下载图片资源 */ async getPicture() { http.createHttp()// 显示网络图片的地址 .request('xxx', (error: BusinessError, data: http.HttpResponse) => { if (error) { // 下载失败时弹窗提示检查网络,不执行后续逻辑 promptAction.showToast({ message: "请求失败", duration: 2000 }) console.error('-----' + error.message) return; } this.transcodePixelMap(data); // 判断网络获取到的资源是否为ArrayBuffer类型 if (data.result instanceof ArrayBuffer) { this.imageBuffer = data.result as ArrayBuffer; } } ) } /** * 使用createPixelMap将ArrayBuffer类型的图片装换为PixelMap类型 * @param data:网络获取到的资源 */ transcodePixelMap(data: http.HttpResponse) { if (ResponseCode.ResponseCode.OK === data.responseCode) { const imageData: ArrayBuffer = data.result as ArrayBuffer; // 通过ArrayBuffer创建图片源实例。 const imageSource: image.ImageSource = image.createImageSource(imageData); const options: image.InitializationOptions = { 'alphaType': 0, // 透明度 'editable': false, // 是否可编辑 'pixelFormat': 3, // 像素格式 'scaleMode': 1, // 缩略值 'size': { height: 100, width: 100 } }; // 创建图片大小 // 通过属性创建PixelMap imageSource.createPixelMap(options).then((pixelMap: PixelMap) => { this.image = pixelMap; }); } } /** * 保存ArrayBuffer到图库 * @param buffer:图片ArrayBuffer * @returns */ async saveImage(buffer: ArrayBuffer | string): Promise<void> { 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, buffer); await fs.close(file.fd); } }
可以参考以下案例: