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

微信小程序canvas画布图片保存到相册官方授权、自定义授权、保存

关键步骤介绍

wx.getSetting可以获取授权信息。

wx.authorize首次授权时会打开弹框让用户授权,若用户已选择同意或拒绝,后续不会再显示授权弹框。

如果授权信息显示未进行相册授权,则打开自定义弹框(show_auth: true)让用户选择是否自行配置授权。

如果授权信息显示已进行相册授权,则保存canvas为图片并保存到相册。

.js

  download_canvas(e){wx.getSetting().then(get_s_res=>{wx.authorize({scope: 'scope.writePhotosAlbum',})if(!get_s_res.authSetting['scope.writePhotosAlbum']){this.setData({show_auth: true})}else{wx.canvasToTempFilePath({x: 0,y: 0,width: this.data.canvas.width/this.data.pixelRatio,height: this.data.canvas.height/this.data.pixelRatio,destWidth: this.data.canvas.width,destHeight: this.data.canvas.height,canvas: this.data.canvas}).then(c_res=>{wx.saveImageToPhotosAlbum({filePath: c_res.tempFilePath,}).then(s_res=>{wx.showToast({title: '保存到相册成功',icon: 'success',duration: 2000})}).catch(s_res=>{console.log('error',s_res)})}).catch(c_res=>{console.log('error',c_res)})}}).catch(g_s_res=>{console.log('error',g_s_res)})

Component实现自定义授权弹框

在component定义授权确认弹框,点击确认,打开settings界面让用户设置授权信息。

 .wxml

title和content显示内容由调用主体传入。

<view class="modal-mask" wx:if="{{show}}"><view class="modal" wx:if="{{show}}"><view class="info"><label class="title">{{title}}</label><text class="content">{{content}}</text></view>   <view class="op-button"><button size="mini" bind:tap="cancel_and_close" style="box-shadow: 0 0 5rpx darkgray;">取消</button><button size="mini" bind:tap="open_setting" type="primary">确认</button></view></view>
</view>

wxss:

modal-mask实现遮罩效果。

.modal-mask{display: flex;justify-content: center;align-items: center;position: fixed;left: 0;right: 0;top: 0;bottom: 0;background-color: rgba(0,0,0,0.5);z-index: 999;
}
.modal{position: fixed;top: 40%;left:15%;width: 70%;height: 20%;background-color: white;box-shadow: 0 0 5rpx darkgray;display: flex;flex-direction: column;justify-content: space-evenly;align-items: center;border-radius: 30rpx;z-index: 1000;
}
.info{display: flex;flex-direction: column;justify-content: center;align-items: center;margin: 10rpx
}
.title{font-weight: bold;white-space:pre-wrap;word-wrap:break-word;margin-bottom: 10rpx;
}
.content{white-space:pre-wrap;word-wrap:break-word;
}
.op-button{display: flex;align-items: center;justify-content: space-between;width: 100%;margin-bottom: 10rpx;
}

.js

wx.openSetting需要通过点击按钮调用,不可直接调用。

// components/show-modal/show-modal.js
Component({/*** 组件的属性列表*/properties: {show:{type:Boolean,value:false},title:{type:String,value:""},content:{type:String,value:""}},/*** 组件的初始数据*/data: {},/*** 组件的方法列表*/methods: {cancel_and_close(){this.setData({show: false})},open_setting(){this.setData({show: false})wx.openSetting()}}
})

 在主体调用component:

.wxml

<show-modal show="{{show_auth}}" title="警告" content="未完成相册授权,无法保存到相册,请完成授权后继续。"></show-modal>

13595ebd9953450e99f82e028f1944f0.jpeg

 点击确认,打开settings让用户自行配置授权:

6bc22f17d80e4ceb89d07973da0d07ef.jpeg

更多微信小程序内容,欢迎关注、评论、私信博主。

 

相关文章:

  • 部署本地GPT
  • IDEA 在本地启动多个 SpringBoot 后端服务模拟集群
  • python 抽象接口和对应关系总结
  • 区间预测 | Matlab实现BiLSTM-Adaboost-ABKDE的集成双向长短期记忆网络自适应带宽核密度估计多变量回归区间预测
  • vtk9.3 配置 visual studio 2019 运行环境 和运行实例详解
  • 低代码-添加按钮组件设计
  • OpenJDK 和 OracleJDK 哪个jdk更好更稳定,正式项目用哪个呢?关注者
  • 三、Qt Creator 使用
  • 什么是池化层?
  • mac上搭建 hadoop 伪集群
  • 序章 熟悉战场篇—了解vue的基本操作
  • Mysql 安装通过mysql installer安装+配置环境+连接可视化工具
  • Ubuntu 22.04 基础环境搭建
  • 码云星辰:未来运维的技术交响曲
  • SLF4J Spring Boot日志框架
  • JavaScript DOM 10 - 滚动
  • JS正则表达式精简教程(JavaScript RegExp 对象)
  • Nodejs和JavaWeb协助开发
  • Perseus-BERT——业内性能极致优化的BERT训练方案
  • Python打包系统简单入门
  • seaborn 安装成功 + ImportError: DLL load failed: 找不到指定的模块 问题解决
  • ubuntu 下nginx安装 并支持https协议
  • Vue 2.3、2.4 知识点小结
  • 阿里云购买磁盘后挂载
  • 电商搜索引擎的架构设计和性能优化
  • 互联网大裁员:Java程序员失工作,焉知不能进ali?
  • 前端路由实现-history
  • 浅谈JavaScript的面向对象和它的封装、继承、多态
  • 如何优雅的使用vue+Dcloud(Hbuild)开发混合app
  • 使用 @font-face
  • 一道面试题引发的“血案”
  • 用Canvas画一棵二叉树
  • 不要一棍子打翻所有黑盒模型,其实可以让它们发挥作用 ...
  • ​猴子吃桃问题:每天都吃了前一天剩下的一半多一个。
  • #在线报价接单​再坚持一下 明天是真的周六.出现货 实单来谈
  • (arch)linux 转换文件编码格式
  • (AtCoder Beginner Contest 340) -- F - S = 1 -- 题解
  • (C++)八皇后问题
  • (Forward) Music Player: From UI Proposal to Code
  • (八)五种元启发算法(DBO、LO、SWO、COA、LSO、KOA、GRO)求解无人机路径规划MATLAB
  • (附源码)ssm高校社团管理系统 毕业设计 234162
  • (力扣记录)1448. 统计二叉树中好节点的数目
  • (论文阅读22/100)Learning a Deep Compact Image Representation for Visual Tracking
  • (详细版)Vary: Scaling up the Vision Vocabulary for Large Vision-Language Models
  • (转)菜鸟学数据库(三)——存储过程
  • (转载)hibernate缓存
  • (转载)VS2010/MFC编程入门之三十四(菜单:VS2010菜单资源详解)
  • (最优化理论与方法)第二章最优化所需基础知识-第三节:重要凸集举例
  • *setTimeout实现text输入在用户停顿时才调用事件!*
  • . ./ bash dash source 这五种执行shell脚本方式 区别
  • .NET CORE使用Redis分布式锁续命(续期)问题
  • .NET6使用MiniExcel根据数据源横向导出头部标题及数据
  • @AutoConfigurationPackage的使用
  • [ CTF ] WriteUp-2022年春秋杯网络安全联赛-冬季赛
  • [2019.3.20]BZOJ4573 [Zjoi2016]大森林