热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

小程序生成二维码并且保存分享

效果图hidden是用来隐藏显示图层的prurl是生成出来的图片临时路径data:{prurl:,hidden:true}核心JS代码getQr:function(){vartha

效果图
《小程序生成二维码并且保存分享》

hidden 是用来隐藏显示图层的 prurl是生成出来的图片临时路径

data: {
prurl: '',
hidden: true
}

核心JS代码

getQr: function () {
var that = this
wx.showLoading({
title: '生成二维码中...',
})
if (that.data.prurl != ''){
that.setData({
hidden: false
})
wx.hideLoading()
}else{
wx.request({
url: app.globalData.url + '/wx/getQr/' + app.globalData.openId,
header: {
'content-type': 'application/json'
},
success: function (res) {
// app.globalData.userQr = res.data;
that.setData({
userQr: res.data
});
}, complete: () => {
wx.downloadFile({
url: app.globalData.userInfo.avatarUrl,
success: function (res1) {
//缓存头像图片
that.setData({
portrait_temp: res1.tempFilePath
})
}, complete: () => {
that.drawImage()
wx.hideLoading()
}
})
}
})
}
// wx.navigateTo({
// url: '../wxqr/wxqr'
// })
}, drawImage: function () {
var that = this
const fsm = wx.getFileSystemManager();
//传入二维码base64
base64src(this.data.userQr).then(
function (data) {
const ctx = wx.createCanvasContext('img-canvas')
// 底图
ctx.drawImage('/image/tg.png', 0, 40, 307, 441)
// 文字
ctx.setTextAlign('center') // 文字居中
ctx.setFillStyle('#000000') // 文字颜色:黑色
ctx.setFontSize(18) // 文字字号:22px
ctx.fillText(that.data.user.name, 307 / 2, 120)
// 文字
ctx.setTextAlign('center') // 文字居中
ctx.setFillStyle('#D4D4D4') // 文字颜色:黑色
ctx.setFontSize(14) // 文字字号:22px
ctx.fillText('长按扫描小程序', 307 / 2, 400)
// 小程序码
const qrImgSize = 180
//第一个数字是左边距 第二个参数上边距
ctx.drawImage(data, (300 - qrImgSize) / 2, 180, qrImgSize, qrImgSize)
//画圆的代码需要放在最后不然会导致其他代码无法执行
// 下面是先定位要开个圆形的位置,160 和 45 分别就是圆的圆心的 x 坐标和 y 坐标,40 是半径,后面的两个参数就是起始和结束,这样就能画好一个圆了
ctx.arc(155, 45, 40, 0, 2 * Math.PI);
ctx.closePath();
// 下面就裁剪出一个圆形了
ctx.clip();
//头像
ctx.drawImage(that.data.portrait_temp, 115, 5, 80, 80)
ctx.restore();
ctx.stroke()
ctx.draw(false, function () {
//生成分享图
wx.canvasToTempFilePath({
canvasId: 'img-canvas',
success: function (res) {
console.info(res.tempFilePath)
that.setData({
prurl: res.tempFilePath,
hidden: false
})
}
})
})
}
)
},
// 保存图片到本地
saveCanvas: function () {
var that = this
wx.saveImageToPhotosAlbum({
filePath: that.data.prurl,
success(res) {
wx.showModal({
content: '图片已保存到相册,赶紧晒一下吧~',
showCancel: false,
confirmText: '好的',
confirmColor: '#333',
success: function (res) {
if (res.confirm) {
that.closeCanvas()
}
}
})
}
})
}, closeCanvas:function(){
/* 该隐藏的隐藏 */
this.setData({
hidden: true
})
}

上面方法调用的一个base64的工具,如果小程序二维码可以有远程路径地址的话可以不需要。

const fsm = wx.getFileSystemManager();
const FILE_BASE_NAME = 'tmp_base64src';
const base64src = function (base64data) {
return new Promise((resolve, reject) => {
const [, format, bodyData] = /data:image\/(\w+);base64,(.*)/.exec(base64data) || [];
if (!format) {
reject(new Error('ERROR_BASE64SRC_PARSE'));
}
const filePath = `${wx.env.USER_DATA_PATH}/${FILE_BASE_NAME}.${format}`;
const buffer = wx.base64ToArrayBuffer(bodyData);
fsm.writeFile({
filePath,
data: buffer,
encoding: 'binary',
success() {
resolve(filePath);
},
fail() {
reject(new Error('ERROR_BASE64SRC_WRITE'));
},
});
});
};
export default base64src;

html代码






推荐阅读
  • vue使用
    关键词: ... [详细]
  • 在Android开发中,使用Picasso库可以实现对网络图片的等比例缩放。本文介绍了使用Picasso库进行图片缩放的方法,并提供了具体的代码实现。通过获取图片的宽高,计算目标宽度和高度,并创建新图实现等比例缩放。 ... [详细]
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
  • 本文分享了一个关于在C#中使用异步代码的问题,作者在控制台中运行时代码正常工作,但在Windows窗体中却无法正常工作。作者尝试搜索局域网上的主机,但在窗体中计数器没有减少。文章提供了相关的代码和解决思路。 ... [详细]
  • Metasploit攻击渗透实践
    本文介绍了Metasploit攻击渗透实践的内容和要求,包括主动攻击、针对浏览器和客户端的攻击,以及成功应用辅助模块的实践过程。其中涉及使用Hydra在不知道密码的情况下攻击metsploit2靶机获取密码,以及攻击浏览器中的tomcat服务的具体步骤。同时还讲解了爆破密码的方法和设置攻击目标主机的相关参数。 ... [详细]
  • Java序列化对象传给PHP的方法及原理解析
    本文介绍了Java序列化对象传给PHP的方法及原理,包括Java对象传递的方式、序列化的方式、PHP中的序列化用法介绍、Java是否能反序列化PHP的数据、Java序列化的原理以及解决Java序列化中的问题。同时还解释了序列化的概念和作用,以及代码执行序列化所需要的权限。最后指出,序列化会将对象实例的所有字段都进行序列化,使得数据能够被表示为实例的序列化数据,但只有能够解释该格式的代码才能够确定数据的内容。 ... [详细]
  • sklearn数据集库中的常用数据集类型介绍
    本文介绍了sklearn数据集库中常用的数据集类型,包括玩具数据集和样本生成器。其中详细介绍了波士顿房价数据集,包含了波士顿506处房屋的13种不同特征以及房屋价格,适用于回归任务。 ... [详细]
  • Google Play推出全新的应用内评价API,帮助开发者获取更多优质用户反馈。用户每天在Google Play上发表数百万条评论,这有助于开发者了解用户喜好和改进需求。开发者可以选择在适当的时间请求用户撰写评论,以获得全面而有用的反馈。全新应用内评价功能让用户无需返回应用详情页面即可发表评论,提升用户体验。 ... [详细]
  • 本文介绍了在Vue项目中如何结合Element UI解决连续上传多张图片及图片编辑的问题。作者强调了在编码前要明确需求和所需要的结果,并详细描述了自己的代码实现过程。 ... [详细]
  • HTML学习02 图像标签的使用和属性
    本文介绍了HTML中图像标签的使用和属性,包括定义图像、定义图像地图、使用源属性和替换文本属性。同时提供了相关实例和注意事项,帮助读者更好地理解和应用图像标签。 ... [详细]
  • Html5-Canvas实现简易的抽奖转盘效果
    本文介绍了如何使用Html5和Canvas标签来实现简易的抽奖转盘效果,同时使用了jQueryRotate.js旋转插件。文章中给出了主要的html和css代码,并展示了实现的基本效果。 ... [详细]
  • 本文讨论了clone的fork与pthread_create创建线程的不同之处。进程是一个指令执行流及其执行环境,其执行环境是一个系统资源的集合。在调用系统调用fork创建一个进程时,子进程只是完全复制父进程的资源,这样得到的子进程独立于父进程,具有良好的并发性。但是二者之间的通讯需要通过专门的通讯机制,另外通过fork创建子进程系统开销很大。因此,在某些情况下,使用clone或pthread_create创建线程可能更加高效。 ... [详细]
  • 荣耀V8搭载基于Android 6.0的EMUI 4.1,功能介绍及用户体验
    本文介绍了荣耀V8搭载基于Android 6.0的EMUI 4.1的功能,包括色温调节、护眼模式、智灵键和学生模式等。荣耀V8在色温调节方面提供了多种选择,用户可以根据自己的喜好进行调节。护眼模式能够减少屏幕蓝光辐射,预防眼部疲劳。智灵键位于机身侧面,用户可以自定义其功能,方便快捷操作。学生模式需要密码才能开启或关闭,为家长提供了更好的控制。通过本文,读者可以了解荣耀V8的功能特点及用户体验。 ... [详细]
  • 本文介绍了在wepy中运用小顺序页面受权的计划,包含了用户点击作废后的从新受权计划。 ... [详细]
  • 一句话解决高并发的核心原则
    本文介绍了解决高并发的核心原则,即将用户访问请求尽量往前推,避免访问CDN、静态服务器、动态服务器、数据库和存储,从而实现高性能、高并发、高可扩展的网站架构。同时提到了Google的成功案例,以及适用于千万级别PV站和亿级PV网站的架构层次。 ... [详细]
author-avatar
Lv嘉文_246
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有