首页 最新 热门 推荐

  • 首页
  • 最新
  • 热门
  • 推荐

鸿蒙Next,图片上传01-将图片存入模拟器相册

  • 25-04-24 16:05
  • 3830
  • 13251
blog.csdn.net

1.通过拖拽将图片从Windows11存储到鸿蒙模拟器

我在使用端云一体化开发时,遇到一个难题,模拟器没有拍照功能,那如何将图片存入模拟器相册呢,

发现模拟器有‘文件管理’,且可以通过-将照片直接从window拖到鸿蒙模拟器,实现复制到模拟器对应的文件下

然后进入到对应文件下,左键点击该照片,在点击左下角分享,在点击保存到图库

成功实现将照片保存到模拟器图库当中,注意我用的是最新版的鸿蒙版本和模拟器。

2.使用鸿蒙编译器将Windows11下的文件存放到模拟器相册中(使用安全组件SaveButton)

SaveButton-安全-ArkTS组件-ArkUI(方舟UI框架)-应用框架 - 华为HarmonyOS开发者

第一步:将要存储的图片放到media文件下面,可以直接拖过去,也可以使用电脑文件管理器,打开该目录的位置,将图片复制过去。(代码示例使用编译器自带图片startIcon.png)

第二步:使用下面示例代码运行模拟器,点击下载,点击允许查看相册(代码块里有详细代码讲解)

图片成功存入相册:

示例代码:

  1. // 导入文件操作相关的工具包
  2. import { fileIo } from '@kit.CoreFileKit'
  3. // 导入媒体库访问帮助类
  4. import { photoAccessHelper } from '@kit.MediaLibraryKit';
  5. // 导入弹窗提示操作相关的工具包
  6. import { promptAction } from '@kit.ArkUI';
  7. @Entry
  8. @Component
  9. struct FileCopy {
  10. // 定义一个响应式状态变量 list,用于存储资源数组
  11. @State
  12. list: Resource[] = [
  13. $r("app.media.startIcon"),
  14. ]
  15. // 定义一个响应式状态变量 index,用于记录当前处理的资源索引
  16. @State index:number=0
  17. // 保存沙箱图片到相册
  18. async saveImgToAssets() {
  19. try {
  20. // 初始化index
  21. this.index = 0
  22. while (this.index < this.list.length) {
  23. // 获取上下文
  24. const context = getContext();
  25. // 通过上下文获取照片访问帮助器实例
  26. let phAccessHelper = photoAccessHelper.getPhotoAccessHelper(context);
  27. // 创建媒体文件
  28. let uri = await phAccessHelper.createAsset(photoAccessHelper.PhotoType.IMAGE, 'jpg');
  29. // 打开创建的媒体文件并读取本地文件并将其转换为 ArrayBuffer 以便于填充
  30. let file = await fileIo.open(uri, fileIo.OpenMode.READ_WRITE);
  31. let buffer = getContext(this).resourceManager.getMediaContentSync(this.list[this.index].id);
  32. // 将读取的 ArrayBuffer 写入新的媒体文件。
  33. await fileIo.write(file.fd, buffer.buffer);
  34. await fileIo.close(file);
  35. // 索引加 1,处理下一个资源
  36. this.index++
  37. }
  38. promptAction.showToast({ message: '下载成功' })
  39. } catch (err) {
  40. AlertDialog.show({ message: err.message })
  41. }
  42. }
  43. build() {
  44. Column({ space: 10 }) {
  45. Row() {
  46. SaveButton()
  47. // 为保存按钮添加点击事件监听器
  48. .onClick((_, result: SaveButtonOnClickResult) => {
  49. // 如果按钮点击操作成功
  50. if (result === SaveButtonOnClickResult.SUCCESS) {
  51. // 调用保存图片到相册的方法
  52. this.saveImgToAssets()
  53. }
  54. })
  55. }
  56. .justifyContent(FlexAlign.Center)
  57. .width('100%')
  58. // 创建一个网格行,每行显示 2 列
  59. GridRow({ columns: 2 }) {
  60. ForEach(this.list, (item: string) => {
  61. GridCol() {
  62. Image(item)
  63. .height(150)
  64. .height(150)
  65. .borderRadius(4)
  66. }
  67. .margin({
  68. top: 10
  69. })
  70. })
  71. }
  72. }
  73. }
  74. }// 导入文件操作相关的工具包
  75. import { fileIo } from '@kit.CoreFileKit'
  76. // 导入媒体库访问帮助类
  77. import { photoAccessHelper } from '@kit.MediaLibraryKit';
  78. // 导入弹窗提示操作相关的工具包
  79. import { promptAction } from '@kit.ArkUI';
  80. @Entry
  81. @Component
  82. struct FileCopy {
  83. // 定义一个响应式状态变量 list,用于存储资源数组
  84. @State
  85. list: Resource[] = [
  86. $r("app.media.startIcon"),
  87. ]
  88. // 定义一个响应式状态变量 index,用于记录当前处理的资源索引
  89. @State index:number=0
  90. // 保存沙箱图片到相册
  91. async saveImgToAssets() {
  92. try {
  93. // 初始化index
  94. this.index = 0
  95. while (this.index < this.list.length) {
  96. // 获取上下文
  97. const context = getContext();
  98. // 通过上下文获取照片访问帮助器实例
  99. let phAccessHelper = photoAccessHelper.getPhotoAccessHelper(context);
  100. // 创建媒体文件
  101. let uri = await phAccessHelper.createAsset(photoAccessHelper.PhotoType.IMAGE, 'jpg');
  102. // 打开创建的媒体文件并读取本地文件并将其转换为 ArrayBuffer 以便于填充
  103. let file = await fileIo.open(uri, fileIo.OpenMode.READ_WRITE);
  104. let buffer = getContext(this).resourceManager.getMediaContentSync(this.list[this.index].id);
  105. // 将读取的 ArrayBuffer 写入新的媒体文件。
  106. await fileIo.write(file.fd, buffer.buffer);
  107. await fileIo.close(file);
  108. // 索引加 1,处理下一个资源
  109. this.index++
  110. }
  111. promptAction.showToast({ message: '下载成功' })
  112. } catch (err) {
  113. AlertDialog.show({ message: err.message })
  114. }
  115. }
  116. build() {
  117. Column({ space: 10 }) {
  118. Row() {
  119. SaveButton()
  120. // 为保存按钮添加点击事件监听器
  121. .onClick((_, result: SaveButtonOnClickResult) => {
  122. // 如果按钮点击操作成功
  123. if (result === SaveButtonOnClickResult.SUCCESS) {
  124. // 调用保存图片到相册的方法
  125. this.saveImgToAssets()
  126. }
  127. })
  128. }
  129. .justifyContent(FlexAlign.Center)
  130. .width('100%')
  131. // 创建一个网格行,每行显示 2 列
  132. GridRow({ columns: 2 }) {
  133. ForEach(this.list, (item: string) => {
  134. GridCol() {
  135. Image(item)
  136. .height(150)
  137. .height(150)
  138. .borderRadius(4)
  139. }
  140. .margin({
  141. top: 10
  142. })
  143. })
  144. }
  145. }
  146. }
  147. }

适用HarmonyOS NEXT / API12或以上版本

注:本文转载自blog.csdn.net的试水年华的文章"https://blog.csdn.net/m0_66451496/article/details/146286256"。版权归原作者所有,此博客不拥有其著作权,亦不承担相应法律责任。如有侵权,请联系我们删除。
复制链接
复制链接
相关推荐
发表评论
登录后才能发表评论和回复 注册

/ 登录

评论记录:

未查询到任何数据!
回复评论:

分类栏目

后端 (14832) 前端 (14280) 移动开发 (3760) 编程语言 (3851) Java (3904) Python (3298) 人工智能 (10119) AIGC (2810) 大数据 (3499) 数据库 (3945) 数据结构与算法 (3757) 音视频 (2669) 云原生 (3145) 云平台 (2965) 前沿技术 (2993) 开源 (2160) 小程序 (2860) 运维 (2533) 服务器 (2698) 操作系统 (2325) 硬件开发 (2492) 嵌入式 (2955) 微软技术 (2769) 软件工程 (2056) 测试 (2865) 网络空间安全 (2948) 网络与通信 (2797) 用户体验设计 (2592) 学习和成长 (2593) 搜索 (2744) 开发工具 (7108) 游戏 (2829) HarmonyOS (2935) 区块链 (2782) 数学 (3112) 3C硬件 (2759) 资讯 (2909) Android (4709) iOS (1850) 代码人生 (3043) 阅读 (2841)

热门文章

135
HarmonyOS
关于我们 隐私政策 免责声明 联系我们
Copyright © 2020-2024 蚁人论坛 (iYenn.com) All Rights Reserved.
Scroll to Top