当前位置: 首页 > news >正文

HarmonyOS开发之使用PhotoViewPicker(图库选择器)保存图片

一:效果图

二:添加依赖

import fs from '@ohos.file.fs';//文件管理
import picker from '@ohos.file.picker'//选择器

三:下载,保存图片的实现

// 下载图片imgUrldownloadAndSaveImage(imgUrl: string) {http.createHttp().request(imgUrl,(error, data: http.HttpResponse) => {if (error) {promptAction.showToast({message: '下载失败',duration: 2000})return}if (data.result instanceof ArrayBuffer) {this.pickerSave(data.result as ArrayBuffer)}})}//保存图片async pickerSave(buffer: ArrayBuffer): Promise<void> {const photoSaveOptions = new picker.PhotoSaveOptions() // 创建文件管理器保存选项实例photoSaveOptions.newFileNames = ['PhotoView' + new Date().getTime() + '.jpg']//创建一个开头为PhotoView_xxxx_.jpg的图片const photoViewPicker = new picker.PhotoViewPickerphotoViewPicker.save(photoSaveOptions).then(async (photoSaveResult) => {let uri = photoSaveResult[0]let file = await fs.open(uri, fs.OpenMode.READ_WRITE | fs.OpenMode.CREATE)await fs.write(file.fd, buffer)await fs.close(file.fd)promptAction.showToast({message: "保存成功"})}).catch(error => {console.log('downloadAndSaveImage  保存失败:', error)promptAction.showToast({message: "保存失败"})})}

四:在Page中的使用

@Entry
@Component
struct ImgPage {@State imageUrl: string =""aboutToAppear(){const params = router.getParams()if (params) {this.imageUrl = params['imageUrl']//https:xxxxxx.pngif (!this.imageUrl) {console.error("imageUrl 加载失败: imageUrl 为空");}}}build() {Column() {Stack().height(30)HeadlineBar({title:"详情",heightBar: 45,fontSize:20,closeCallback: () => {router.back()}})// 显示每个图片Image(this.imageUrl).alt($r('app.media.icon'))// 使用alt,在网络图片加载成功前使用占位图.width(300).height(400).margin({top:30}).borderRadius(8)Button('立即下载').fontSize(15).width(131).height(54).margin({top:30}).onClick(()=>{if (this.imageUrl) {weatherApi.downloadAndSaveImage(this.imageUrl)}})}.width('100%').height('100%')}
}

http://www.lryc.cn/news/436011.html

相关文章:

  • 跨境独立站支付收款常见问题排雷篇1.0丨出海笔记
  • uni-app实现web-view和App之间的相互通信
  • HTB-Vaccine(suid提权、sqlmap、john2zip)
  • 【达梦数据库】异构数据库迁移到达梦
  • 抽象类和接口(1)
  • epoll内核原理与实现详解
  • 被低估的SQL
  • 数字证书、数字签名及其关系
  • 一文读懂:如何将广告融入大型语言模型(LLM)输出
  • godotenv拜读
  • 解析REST API与OpenAPI之差异:避免混淆
  • 一篇文章就搞懂了:过虑器 、拦截器 、监听器是什么
  • 本体映射与本体集成
  • 华媒舍:10种提升推特大V发文推广曝光率的方式
  • 前端本地存储数据:深入解析与代码示例(Cookie、LocalStorage、SessionStorage和IndexedDB)
  • Java语言程序设计基础篇_编程练习题*18.21 (将十进制数转换为二进制数)
  • 中年转行新可能:18 个月迈向大模型提示词工程师
  • C++通过返回值和输出参数的原理是什么?分别有什么优势和缺点?
  • AI客服机器人开启企业客户服务新纪元
  • TPM项目课题的确定需要考虑哪些因素?
  • Rust 数据类型
  • C#无标题栏窗体拖动
  • MySQL容器配置连接数数,镜像重启生效
  • 《OpenCV计算机视觉》—— 身份证号码识别案例
  • 如何使用正则表达式替换字符串中的特定位置数字
  • 【SQL】在SQL中,行转列
  • 95. UE5 GAS RPG 实现创建多段飞弹攻击敌人
  • 分布式集群下如何做到唯一序列号
  • 在 Vue 2 中使用 Axios 发起 POST 和 GET 请求
  • Linux内核初始化过程中加载TCP/IP协议栈