小程序分享模块超级详解(推荐)(2)

//将网络图片转换为本地路径 handleNetImg: function(imagePath) { var that = this; return new Promise((resolve, reject) => { wx.getImageInfo({ src: imagePath, success: function(res) { resolve(res); } }); }); } handleNetImg('网络图片地址').then((res) => { console.log(res.path); //输出转换后的本地图片路径 ctx.drawImage(res.path, 0, 0, width, height); //此时图片即可在画布上绘制出来 })

base64 图片

使用 ctx.drawImage(base64Data, 0, 0, width, height) 在小程序开发者工具上是可以绘制的, 然而!!!这个大骗纸!!!真机上是失效的!!!(心碎一分钟。。。)

跟上面类似的思路,我们把 base64的图片 转为本地的 png图片

var handleBase64Img = function() { //wx.getFileSystemManager 小程序文件管理器 var fsm = wx.getFileSystemManager(); var FILE_NAME = 'base64src'; var base64src = function(base64data) { return new Promise((resolve, reject) => { //解析base64,提取出图片类型: imgtype,解析内容bodyData(去掉data:image/png;base64,以后的内容) var [, imgType, bodyData] = /data:image\/(\w+);base64,(.*)/.exec(base64data) || []; if (!imgType) { reject(new Error('ERROR_BASE64SRC_PARSE')); } /** *wx.env.USER_DATA_PATH *本地用户文件 *本地用户文件是从 1.7.0 版本开始新增的概念。提供了一个用户文件目录给开发者,开发者对这个目录有完全自由的读写权限。通过 wx.env.USER_DATA_PATH 可以获取到这个目录的路径。 */ var filePath = `${wx.env.USER_DATA_PATH}/${FILE_NAME}.${imgType}`; //按指定写入文件的字符编码encoding,向地址filepath,写入数据data。 fsm.writeFile({ filePath, data: bodyData, encoding: 'base64', success() { resolve(filePath); }, fail() { reject(new Error('ERROR_BASE64SRC_WRITE')); }, }); }); }; return base64src; } var base64src = that.handleBase64Img(); var handleBase64src = base64src(base64data); handleBase64src.then(res => { //res 即为base64 转化为图片后的本地路径,即可在画布上绘制成功 that.ctx.drawImage(res, left, top, width, height); });

通过上述的一些内容,我们已经知道如何利用 canvas 把图片和文字绘制在一起后生成一张新的图片,这里就产生了一个新的问题: 我们如何把生成的图片保存下来呢 ??? 我们接着往细看canvas 生成图片后如何保存到本地

canvas 生成图片后如何保存到相册中

想要保存到相册中第一步首先当然是要获得访问相册的权限!!!

小程序分享模块超级详解(推荐)

//访问相册授权 wx.getSetting({ success: (res) => { //检查是否有访问相册的权限,如果没有则通过wx.authorize方法授权(授权只需要一次就好,后面就可以直接访问相册) if (!res.authSetting['scope.writePhotosAlbum']) { console.log('没有获取授权'); wx.authorize({ scope: 'scope.writePhotosAlbum', success: (res) => { //用户点击允许获取相册信息后逻辑进入这里,如上图所示 } }) } } }); //获取了相册的访问权限,使用 wx.saveImageToPhotosAlbum 将图片保存到相册中 wx.saveImageToPhotosAlbum({ filePath: that.data.sharePicPath, success: (res) => { //保存成功弹出提示,告知一下用户 wx.showModal({ title: '已保存到手机相册', content: '将图片发送到朋友圈,邀请好友加入', confirmColor: '#0bc183', confirmText: '知道了', showCancel: false }) } })

如何生成小程序码及验证小程序码所带信息

在小程序的分享朋友圈的解决方案中,往往在生成的海报页面中都会有一个小程序码,使得用户有进入小程序的入口,那么这个小程序码如何生成呢?

官方文档:获取小程序码

小程序分享模块超级详解(推荐)

注意:因为生成小程序码的接口参数需要 access_token,安全起见,一般都通过后台调用在拿到base64的数据在返回给前端。

我们在回到正题:

上述三种生成接口,大家根据情况按需使用,因为我的项目里,需要经常生成不同页面对应的小程序码, B 类接口比较符合我的要求,这里就重点描述下 B 类接口的 使用 和 自测

B 类接口入参,出参官方说明-- 接口 B:适用于需要的码数量极多的业务场景

重点看下 scene : 最大32个可见字符,有页面路径带参数的情况下要尤其注意!!!

把 page , scene 等参数传递给后台后,后台调用 B 类接口,返回给前端一个base64的图片数据,我们把这个数据绘制到海报上就好!!!

绘制方法上面已经说过canvas 对不同来源图片的处理(本地图片, 网络图片 , base64图片 )

现在小程序码的图片已经生成了,那么我们要如何自测呢?怎么才能知道小程序码中所携带信息是否正确呢?

官方给出的方法:

上述方法在开发阶段是比较方便,但是在正式的提测阶段,此种方式显得有些牵强,有人想到真机调试?

官方接口只能生成已发布的小程序的二维码

也就是说,你扫码就连上生产环境了!!!没有办法调试,那到底怎么办呢???

解决办法就要借助强大的小程序开发者工具啦!!!

首先把生成的小程序码保存到电脑里,方法见上述canvas 生成图片后如何保存到本地部分。

然后通过开发者工具选择二维码编译模式,文件夹中选择带有小程序码的图片即可!!!

小程序分享模块超级详解(推荐)

注意: 获取 scene 值时要 decodeURIComponent

Page({ onLoad(query) { // scene 需要使用 decodeURIComponent 才能获取到生成二维码时传入的 scene const scene = decodeURIComponent(query.scene) } })

抽离配置文件,使绘制更加灵活

我们观察如下一个小程序海报:

小程序分享模块超级详解(推荐)

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/d50ddc70e1203d54f94433dad1e101f9.html