当前位置:   article > 正文

微信小程序之生成图片分享 二维码分享 canvas绘制_微信小程序使用canvas生成分享邀请码

微信小程序使用canvas生成分享邀请码

如果本文对你有用,请爱心点个赞,提高排名,帮助更多的人。谢谢大家!❤

如果解决不了,可以在文末进群交流。

添加画布

首先,在小程序里进行绘图操作需要用到<canvas>组件,步骤大致分为以下3个部分:一张大的背景图,一段动态的文字(‘标题 用户名 及其他信息’),以及一个小程序码图片。那我们就先在我们的wxml代码中放入如下的<canvas>:

  1. <!--wxml代码-->
  2. <view style='width:100%;height:100%;' bindlongpress='saveInviteCard'>
  3. <canvas canvas-id="shareCanvas" style="width:{{windowWidth}}px;height:{{windowHeight}}px" ></canvas>
  4. </view>

 第三方函数引入

const util = require('../../utils/util.js')
  1. //util.js
  2. var Promise = require('../components/bluebird.min.js')
  3. module.exports = {
  4. promisify: api => {
  5. return (options, ...params) => {
  6. return new Promise((resolve, reject) => {
  7. const extras = {
  8. success: resolve,
  9. fail: reject
  10. }
  11. api({ ...options, ...extras }, ...params)
  12. })
  13. }
  14. }
  15. }

bluebird.min.js大家可自己百度下载,源文件代码太长,我这里就不复制粘贴了。

  1. //获取手机宽高
  2. wx.getSystemInfo({
  3. success: function (res) {
  4. wc.put('phoneInfo', res)
  5. }
  6. });
  7. var windowHeight = phoneInfo.windowHeight, windowWidth = phoneInfo.windowWidth
  8. self.setData({
  9. windowHeight: windowHeight,
  10. windowWidth: windowWidth
  11. })
  12. //在这段代码中,我们通过使用wx.getImageInfo这个API来下载一个网络图片到本地(并可获取该图片的尺寸等其他信息),然后调用ctx.drawImage方法将图片绘制到画布上,填满画布。
  13. //图片的src地址,请使用小程序内合法域名生成的图片地址。
  14. const wxGetImageInfo = util.promisify(wx.getImageInfo)
  15. //绘制二维码
  16. Promise.all([
  17. //背景图
  18. wxGetImageInfo({
  19. src: 'https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1536213812443&di=753a0a49acfd390fba9fd7884daafa5c&imgtype=0&src=http%3A%2F%2Fi5.hexunimg.cn%2F2016-08-10%2F185422031.jpg'
  20. }),
  21. //二维码
  22. wxGetImageInfo({
  23. src: 'https://ss0.bdstatic.com/70cFuHSh_Q1YnxGkpoWK1HF6hhy/it/u=1898297765,3486952215&fm=26&gp=0.jpg'
  24. })
  25. ]).then(res => {
  26. console.log(res)
  27. if (res[0].errMsg == "getImageInfo:ok" && res[1].errMsg == "getImageInfo:ok"){
  28. const ctx = wx.createCanvasContext('shareCanvas')
  29. // 底图
  30. ctx.drawImage(res[0].path, 0, 0, windowWidth, windowHeight)
  31. //写入文字
  32. ctx.setTextAlign('center') // 文字居中
  33. ctx.setFillStyle('#f3a721') // 文字颜色:黑色
  34. ctx.setFontSize(22) // 文字字号:22px
  35. ctx.fillText("作者:墜夢—Eric", windowWidth / 2, windowHeight / 2)
  36. // 小程序码
  37. const qrImgSize = 150
  38. ctx.drawImage(res[1].path, (windowWidth - qrImgSize) / 2, windowHeight / 1.8, qrImgSize, qrImgSize)
  39. ctx.stroke()
  40. ctx.draw()
  41. }else{
  42. wx.showToast({
  43. title: '邀请卡绘制失败!',
  44. image:'../../asset/images/warning.png'
  45. })
  46. }
  47. })

 背景图和二维码的图片地址,请使用小程序合法域名内的src地址。

这样,差不多我们的分享图就生成好了。

长按图片保存到系统相册

要把它保存进用户的系统相册中去,实现这个功能,我们主要靠wx.canvasToTempFilePathwx.saveImageToPhotosAlbum这两个API。

主要的流程就是先通过wx.canvasToTempFilePath<canvas>上绘制的图像生成临时文件的形式,然后再通过wx.saveImageToPhotosAlbum进行保存到系统相册的操作。

  1. //保存邀请卡
  2. saveInviteCard:function(){
  3. console.log('保存图片')
  4. const wxCanvasToTempFilePath = util.promisify(wx.canvasToTempFilePath)
  5. const wxSaveImageToPhotosAlbum = util.promisify(wx.saveImageToPhotosAlbum)
  6. wxCanvasToTempFilePath({
  7. canvasId: 'shareCanvas'
  8. }, this).then(res => {
  9. return wxSaveImageToPhotosAlbum({
  10. filePath: res.tempFilePath
  11. })
  12. }).then(res => {
  13. wx.showToast({
  14. title: '已保存到相册'
  15. })
  16. })
  17. }

有其他问题,请大家进入微信群 ,二维码如果过期,大家可以加我微信:mengyilingjian,一起交流。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/空白诗007/article/detail/849014
推荐阅读
相关标签
  

闽ICP备14008679号