微信小程序保存图片到相册;uni-app小程序保存网络图片到相册;小程序保存图片到相册拒绝授权后重新拉起授权;保存图片到系统相册;小程序保存图片测试可以,真机保存图片失败

文末代码可以直接复制使用,图片修改成你的图片路径即可

在这里插入图片描述

一、场景: 小程序点击按钮,保存项目内的静态图片或者微信头像或者后端返回的图片;

二、注意点及思路拆分:
–2.1:小程序保存图片功能,必须要有scope.writePhotosAlbum保存图片到相册的授权权限才可以
–授权会有拒绝时候,拒绝授权后如何再次重新拉起授权,以下代码直接写了
.
–2.2:保存图片到系统相册,图片文件路径,可以是临时文件路径也可以是永久文件路径,不支持网络图片路径(和项目内的相对图片路径)
.
–2.3:针对上述的2.2不支持的图片,我们需要使用uni.getImageInfo()获取其图片的临时文件路径进行保存
uni.getImageInfo()支持获取src为相对路径、临时文件路径、存储文件路径和网络图片路径的图片,以此获得此图片的图片信息(就包含此图片的临时路径)
.
–2.4:小程序下获取网络图片信息需先配置download域名白名单才能生效(文后有如何配置白名单),否则获取会报错getImageInfo:fail download image fail. reason: downloadFile:fail createDownloadTask:fail url not in domain list

–这一点非常重要:网络图片如果不配置download域名白名单,可能就导致你测试扫码或真机测试和小程序工具上都没问题,但是真正线上生产环境的却报错。

在这里插入图片描述

参考:小程序后台设置域名

在这里插入图片描述

在这里插入图片描述

三、以下保存图片代码可直接复制,只需要将第12行的 localImg 图片路径改成你的图片路径即可(前提:如果是网络图片,一定要配置下载域名白名单)

直接复制拿去使用即可!有效就点赞收藏一波吧!

<template><view><img :src="localImg" alt=""><button @click="checkPermissions">点击保存图片到相册</button></view>
</template><script>
export default {data () {return {localImg: '../static/iconimg/big.png',//这个是项目内的相对路径图片    如果是微信头像需要设置域名白名单}},methods: {// 检查是否有权限checkPermissions () {let that = this// 获取用户是否开启 授权保存图片到相册。uni.getSetting({success (res) {// console.log('已知权限',res)// 如果没有授权if (!res.authSetting['scope.writePhotosAlbum']) {// 则拉起授权窗口uni.authorize({scope: 'scope.writePhotosAlbum',success () {//点击允许后--就一直会进入成功授权的回调 就可以使用获取的方法了that.saveImg()},fail (error) {//点击了拒绝授权后--就一直会进入失败回调函数--此时就可以在这里重新拉起授权窗口console.log('拒绝授权则拉起弹框', error)uni.showModal({title: '提示',content: '若点击不授权,将无法保存图片',cancelText: '不授权',cancelColor: '#999',confirmText: '授权',confirmColor: '#f94218',success (res) {console.log(res)if (res.confirm) {// 选择弹框内授权uni.openSetting({success (res) {console.log(res.authSetting)}})} else if (res.cancel) {// 选择弹框内 不授权console.log('用户点击不授权')}}})}})} else {// 有权限--直接保存console.log('有权限  直接调用相应方法')that.saveImg()}},fail: (error) => {console.log('调用微信的查取权限接口失败,并不知道有无权限!只有success调用成功才只知道有无权限', error)uni.showToast({title: error.errMsg,icon: 'none',duration: 1500,})}})},saveImg () {let that = thisuni.showLoading({ title: '加载中...', mask: true })// 获取图片信息--可以拿到图片的临时地址(保存时候用的是临时地址)uni.getImageInfo({src: that.localImg,//小程序下获取网络图片信息需先配置download域名白名单才能生效。例如微信头像的保存就是网络图片,需要在小程序后台配置下载域名// 想要知道这个网络图片的域名 可以通过小程序模拟器-详情-本地设置-取消勾选(不校验合法域名、web-view.......证书) 控制台就会打印提示域名配置success: image => {// 获取图片临时地址成功let img_local_now = image.path// 真正保存图片方法 -- 保存图片的文件路径,可以是临时文件路径也可以是永久文件路径,不支持网络图片路径(也不支持本地代码里的相对图片路径)uni.saveImageToPhotosAlbum({filePath: img_local_now,success: function () {uni.hideLoading()uni.showToast({icon: 'none',position: 'bottom',title: "已保存到系统相册",duration: 1500,})},fail: error => {uni.hideLoading()console.log("保存图片失败", error)uni.showToast({title: error.errMsg,icon: 'none',mask: true,})}})},fail: error => {uni.hideLoading()console.log("获取图片信息(临时地址)失败", error)uni.showToast({title: error.errMsg,icon: 'none',mask: true,})}})}},
}
</script><style>
</style>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/403452.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数组(待完成)

创建 字面量方式 var arr []; var arr ["成员1", 2];//可以是不同成员构造函数方式 空的 var array new Array(); 指定长度 var array2 new Array(10); 成员值都是undefined。此方式有技巧使用 虽然值是undefined&#xff0c;但join后不会出现undefined字符串 比…

VMware打开虚拟机黑屏

排除系统崩溃的情况&#xff0c;比如开机输入密码之后系统黑屏&#xff0c;此原因是由于显示选项开启了3D加速导致的&#xff0c;具体修改步骤&#xff1a; VM->Settings->Hardware->Display 在右面的内容栏中将 Accelerate 3D graphics 取消打勾&#xff0c;然后重启…

[python3.x] 利用chardet检测网页编码

环境&#xff1a;Win7_x64 python3.4.3 需要先下载chardet并进行安装&#xff0c;下载地址&#xff1a;https://pypi.python.org/packages/source/c/chardet/chardet-2.3.0.tar.gz 安装&#xff1a;进入解压后的目录&#xff0c;在命令窗口执行: python setup.py install 写…

js moment时间戳与时间格式相互转换

var moment require(moment) 获取时间戳 : var res moment(Date.now(), YYYY-MM-DD HH:mm:ss).valueOf(); 获取格式时间: var res moment(Date.now()).format(YYYY-MM-DD HH:mm:ss);

微信小程序中base64转换成图片;uni-app小程序base64转图片;微信小程序base64文件转图片;微信小程序base64图片转图片

将微信小程序的图片转成base64 点击此链接看另一篇 以下是将后端返回的base64转成图片&#xff1a; 方法1&#xff1a;使用微信小程序自带方法 //把base64转换成图片getBase64ImageUrl: (base64Url) {/// 获取到base64Datavar base64Data base64Url;/// 通过微信小程序自带方…

PHP流式上传和表单上传(美图秀秀)

最近需要开发一个头像上传的功能&#xff0c;找了很多都需要授权的&#xff0c;后来找到了美图秀秀&#xff0c;功能非常好用。 <?php /*** Note:for octet-stream upload* 这个是流式上传PHP文件* Please be amended accordingly based on the actual situation*/ $post_i…

Linux下如何安装最新版本工具

此博文主要考虑到两个方面的需求&#xff1a; 1.主机处于离线状态&#xff0c;需要离线安装相关工具包&#xff1b; 2.主机的软件源不是最新的&#xff0c;通过在线更新无法达到需求的版本&#xff1b; 此文以获取openssh相关工具包&#xff0c;其他工具包原理类似&#xff…

element-ui 设置table width %百分比

这里的width12设置成min-width!2% 记得所有column都设置百分比哦 <el-table-columnprop"date"label"日期"min-width"12%"></el-table-column>

笔记一

1、logo用<a>标签包围 并给img设置&#xff1a;border&#xff1a;0&#xff08;放置IE浏览器出现框&#xff09; 2、搜索框内有图片&#xff0c;处理方式&#xff1a; 父级div设置border&#xff0c;并调好位置 子级input设置border 0 ;height 100% 图标用<span>包…

[笔记]java-package

[笔记]java&#xff0d;package import 关键字导入一个完整的库时,就会获得“包”(Package)。例如: import java.util.*; 若想导入单独一个类,可在 import 语句里指定那个类的名字: import java.util.Vector; 为 Java 创建一个源码文件的时候,它通常叫作一个“编辑单元”(有时也…

如何安装sshd服务用于远程登录

此博文前提是系统默认没有安装openssh-server&#xff0c;而且现在大部分系统默认只包含openssh-client&#xff0c;这对于需要远程调试和管理的开发者们很不方便&#xff0c;因此本文探讨如何离线安装sshd服务&#xff0c;对于可以在线安装的就比较方便了&#xff0c;可参阅其…

C++中const、volatile、mutable的用法

From: http://blog.csdn.net/wuliming_sc/article/details/3717017 const修饰普通变量和指针 const修饰变量&#xff0c;一般有两种写法&#xff1a; const TYPE value; TYPE const value; 这两种写法在本质上是一样的。它的含义是&#xff1a;const修饰的类型为TYPE的变…

调用未绑定的父类方法和使用supper 函数 之间的选择.

class New_int(int): # 定义一个新的类 继承 int 类def __add__(self,other): # 重写 运算符 # __add__ 就是 int 中 的行为return int.__sub__(self,other) # 重写的 加法运算符 调用 int类 里面的 减法运算运算符def __sub__(self,other):return int.__add__(self…

VMware Tools installation cannot be started manually while Easy Install is in progress.

出现此错误提示主要是由于虚拟机设置里面 CD/DVD 和 Floppy 选项被占用导致 VMware Tools 虚拟光驱无法加载导致&#xff0c;因此设置如下&#xff1a; VM –> Settings –> Hardware –> CD/DVD && CD/DVD 2 && Floppy 这三个选项全部设置为 Auto d…

派生类类型可以转换为基类类型,反之则不行

派生类的对象都含有基类对象作为其一部分&#xff0c;我们可以将指向派生类型的引用转换为指向它的基类型的引用&#xff0c;像转换指针一样&#xff0c;我们可以用派生类的对象初始化或赋值基类对象&#xff0c;反之却不行。class base{ public: }; class derived:public base…

Mac 下隐藏显示隐藏文件

直接使用快捷键&#xff1a; 在 macOS Sierra&#xff0c;可以使用快捷键⌘⇧.(Command Shift .) 来快速&#xff08;在 Finder 中&#xff09;显示和隐藏隐藏文件了。 Mac 下隐藏显示隐藏文件

/bin/tar: 从成员名中删除开头的“/”

From: http://www.361way.com/tar-error/1550.html 今天在使用tar进行打包时&#xff0c;发现报了‘从成员名中删除开头的“/”’的错误。我使用的打包语句如下&#xff1a; [rootbj~]# tar czvf test.tar.gz /root/tomcat/tar: 从成员名中删除开头的“/”/root/tomcat//root…

关于单片机中断

中断&#xff1a;CPU停止当前任务&#xff0c;去处理中断内容&#xff0c;处理完后自动恢复以前任务。 单片机有5个中断源&#xff0c;2个中断优先级&#xff0c;中断受两级控制&#xff1a; 1、CPU开总中断&#xff1b; 2、中断源开中断。 中断源&#xff1a;引起中断事件的类…

不带缓存的I/O和标准(带缓存的)I/O

首先&#xff0c;先稍微了解系统调用的概念&#xff1a;   系统调用&#xff0c;英文名system call&#xff0c;每个操作系统都在内核里有一些内建的函数库&#xff0c;这些函数可以用来完成一些系统系统调用把应用程序的请求传给内核&#xff0c;调用相应的的内核函数完成所…

uni.$emit和uni.$on用法;uni-app微信小程序页面通讯;微信小程序页面通讯

uni-app的官方api uni.$on 场景&#xff1a; 微信小程序两个页面甚至多个页面之间&#xff0c;可能共用一个参数或者需要相互传递使用参数。例如页面A点击按钮&#xff0c;需要把A页面的item数据&#xff0c;赋值给页面B的formData&#xff0c;但是页面A只是传递数据给B&#x…