首页 > 其他分享 ># 【鸿蒙开发】如何生成二维码截图保存到相册##实现分享功能

# 【鸿蒙开发】如何生成二维码截图保存到相册##实现分享功能

时间:2024-12-16 21:27:18浏览次数:5  
标签:截图 const 鸿蒙 相册 ## 保存 width 二维码

【鸿蒙开发】如何生成二维码截图保存到相册##实现分享功能

文章目录


前言

本文主要介绍了一个分享功能,如何分享生成二维码截图保存到相册,涉及到的技术点有生成二维码、截图、将截图保存到相册。

一、业务流程梳理

二维码保存到相册

二、效果展示

在这里插入图片描述

三、实现代码

1.静态布局

静态页面搭建,使用QRCode生成二维码图片,使用安全控件SaveButton获取临时的存储权限。
需要注意,安全控件不允许有任何的遮挡和不允许的样式,例如浅颜色等,否则会下载失败。

@Entry
@Component
struct Index {
  @State shareId: string = '123'
  
  build() {
    Column() {
      Column({ space: 10 }) {
        Image('https://img1.baidu.com/it/u=1908360684,1414086766&fm=253&app=138&size=w931&n=0&f=JPEG&fmt=auto?sec=1734282000&t=2415f668fc217d0ae8f36db3a878a0a2')
          .width(60)
          .aspectRatio(1)
          .borderRadius(30)
          .alignSelf(ItemAlign.Start)
         //生成二维码
        QRCode(this.shareId)
          .width(170)
          .aspectRatio(1)

        Row() {
          Text('来自C宝的分享')
            .fontColor(Color.Orange)
            //安全控件--下载--临时获取存储权限
          SaveButton()
            .backgroundColor(Color.Orange)
            .onClick(() => {
              
            })
        }
        .width('100%')
        .justifyContent(FlexAlign.SpaceBetween)
      }
      .width(250)
      .height(300)
      .backgroundColor('#fff')
      .padding(6)
      //设置id属性,后续根据id截图
      .id('share')
    }
    .width('100%')
    .height('100%')
    .padding(30)
    .backgroundColor('#ccc')
  }
}

2.实现截图保存相册功能

鸿蒙不允许应用直接访问用户相册,所以我们先要将图片写入到沙箱相册,再将图片保存到用户的相册

//保存方法
  async saveImg() {
    try {
    //截图生成像素图
      const pixelMap = await componentSnapshot.get('share')
      const imagePacker = image.createImagePacker()
      //将像素图打包成二进制数据
      const arrayBuffer = await imagePacker.packing(pixelMap, { format: 'image/jpeg', quality: 100 })
      //缓存路径
      const filePath = `${getContext().cacheDir}/${Date.now()}.jpeg`
      const file = fileIo.openSync(filePath, fileIo.OpenMode.CREATE | fileIo.OpenMode.READ_WRITE)
      //将图片写入到沙箱相册
      fileIo.writeSync(file.fd, arrayBuffer)
      fileIo.closeSync(file.fd)
      const uri = fileUri.getUriFromPath(filePath)
      const phAccessHelper = photoAccessHelper.getPhotoAccessHelper(getContext(this))
      //相册管理模块创建资源变更申请保存到相册
      const assetChangeRequest =
        photoAccessHelper.MediaAssetChangeRequest.createImageAssetRequest(getContext(this), uri)
       //提交申请
      await phAccessHelper.applyChanges(assetChangeRequest)
      promptAction.showToast({ message: '保存成功' })
    } catch (err) {
      AlertDialog.show({ message: JSON.stringify(err), alignment: DialogAlignment.Center })
    }
  }

3.调用保存方法

        Row() {
          Text('来自C宝的分享')
            .fontColor(Color.Orange)
          SaveButton()
            .backgroundColor(Color.Orange)
            .onClick((event, result) => {
              //如果授权成功
              if (result === SaveButtonOnClickResult.SUCCESS) {
                this.saveImg()
              }
            })
        }
        .width('100%')
        .justifyContent(FlexAlign.SpaceBetween)

四、实现扫码功能

1.效果展示

需要使用真机演示
在这里插入图片描述

2.实现代码

      Button('扫码')
        .onClick(async () => {
          //判断系统是否支持扫码能力
          if (canIUse('SystemCapability.Multimedia.Scan.ScanBarcode')) {
            const res = await scanBarcode.startScanForResult(getContext(this))
            AlertDialog.show({ message: '扫码结果' + JSON.stringify(res), alignment: DialogAlignment.Center })
          } else {
            promptAction.showToast({ message: '当前设备不支持' })
          }
        })

标签:截图,const,鸿蒙,相册,##,保存,width,二维码
From: https://blog.csdn.net/qq_52940467/article/details/144470724

相关文章

  • # 【鸿蒙面试题】什么是一多开发?
    【鸿蒙面试题】什么是一多开发?文章目录【鸿蒙面试题】什么是一多开发?一、一多开发的概念?二、三个核心一、一多开发的概念?一多开发字面上意思就是一次开发,多端部署。二、三个核心一多开发有三个核心,分别是界面级一多、功能级一多、工程级一多。界面级一多有两种布......
  • ALOHA:A Simple Recipe for Robot Dexterity
    摘要:模仿学习在学习端到端的机器策略中展示了好的结果,本论文的工作解决的问题是,能在多大程度上推动模仿学习来挑战灵巧的操作任务。在ALOHA2平台上,将一个简单的大规模数据收集的配方与可表达的模型(扩散的策略)相结合,可以有效地学习具有挑战性的手动操作任务,包括可变形的物体和复......
  • SDK与项目使用同样的三方依赖库如何解决符号冲突问题
    使用公共依赖,项目和SDK都依赖同一个库,这样就需要沟通和协调,一旦需要升级改动,也许会牵一发而动全身,就是都得跟着改的意思各自维护,谁挖的坑谁填,这样的好处就不会相互牵连,职责相对明确清晰,坏处就是少了复用性,增加冗余具体实施:做成公共组件,由项目宿主(壳工程)依赖,......
  • 2024北京站总结
    2024-12-16今天上午是省选模拟赛,总体来说打的还行,但是还是太菜了,感觉被所有人吊打。T1题意:赛时思路:赛时想了差不多一个小时的贪心,后面发现不会贪,当时以为dp是正解,就推了个dp,可以用\(f_{i,j}\)表示第1个背包选了几个,第2个背包选了几个,然后发现转移方程就是\(f_{i,j}=max(f_......
  • 24.11.07 用户管理补充
    sudo提权,用于普通用户普通用户可以临时成为root,去运行对应的命令类似于皇帝给大臣尚方宝剑需要root用户去配置,普通用户进行使用eg:授权oldboy用户,以root权限运行tail,cat,less,head,more,grep1、先给oldboy用户设置一个密码[root@oldboyedu~]#echo'Lidao996'|passwd--stdi......
  • 24.11.08 用户管理安全补充
    ssh服务远程连接服务:openssh远程连接端口号:22默认22,可以修改端口号禁止root远程登录:普通用户登录,普通用户sudosu-配置文件/etc/ssh/sshd_config修改远程连接端口号为52013#1、检查系统正在使用的端口号[root@oldboyedu~]#ss-lntupNetidStateRecv-QSend-QLoc......
  • 实验6
    任务4:#include<stdio.h>#defineN10typedefstruct{charisbn[20];//isbn号charname[80];//书名charauthor[80];//作者doublesales_price;//售价intsales_count;//销售册数}Book;voidou......
  • 24.11.11 文件权限
    rwx的含义rread#读catlessmorevimwwrite#写vimechosedxexcuter#可执行-#没有权限Linux是如何知道我对某个文件或目录有什么权限的?[root@oldboyedu~]#ll1总用量0-rw-r--r--1rootroot011月120:33fileA.txt-rw-r--r--1rootroot011月......
  • 24.11.12 特殊符号与正则表达式
    特殊符号;;命令的分隔符[root@oldboyedu~]#pwd;whami;whichpwo/root-bash:whami:未找到命令which:nopwoin(/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:/root/bin)&&&&前面命令必须执行成功,才会往后执行[root@oldboyedu~]#llwang.txt&&ec......
  • Redis应用—4.在库存里的应用
    大纲1.库存模块设计2.库存缓存分片和渐进式同步方案3.基于缓存分片的下单库存扣减方案4.商品库存设置流程与异步落库的实现6.库存入库时"缓存分片写入+渐进式写入+写入失败进行MQ补偿"的实现7.库存扣减时"基于库存分片依次扣减+合并扣减+扣不了返还+异步落库"的实......