效果图:

  1. <view class='poste_box' id='canvas-container' style="margin:0 auto;border-radius:16rpx;overflow:hidden;width:690rpx;height:846rpx">
  2. <canvas canvas-id="myCanvas" style="width:690rpx;height:846rpx;"></canvas>
  3. <!-- <canvas id="myCanvas" style="width:690rpx;height:846rpx;"></canvas> -->
  4. </view>
  1. Page({
  2. data: {
  3. cardInfo: {
  4. avater: "https://www.cnblogs.com/images/cnblogs_com/520BigBear/1196074/t_dog.jpg", //需要https图片路径
  5. qrCode: "https://www.cnblogs.com/images/cnblogs_com/520BigBear/1196074/t_love.jpg", //需要https图片路径
  6. Name: '大熊', //姓名
  7. }
  8. },
  9.  
  10. onLoad: function () {
  11. this.getAvaterInfo();
  12. },
  13.  
  14. /**
  15. * 先下载头像图片
  16. */
  17. getAvaterInfo() {
  18. var that = this;
  19. wx.downloadFile({
  20. url: that.data.cardInfo.avater, //头像图片路径
  21. success: function (res) {
  22. if (res.statusCode === 200) {
  23. var avaterSrc = res.tempFilePath; //下载成功返回结果
  24. that.getQrCode(avaterSrc); //继续下载二维码图片
  25.  
  26. }
  27. }
  28. })
  29. },
  30.  
  31. /**
  32. * 下载二维码图片
  33. */
  34. getQrCode(avaterSrc) {
  35. var that = this;
  36. wx.downloadFile({
  37. url: that.data.cardInfo.qrCode, //二维码路径
  38. success: function (res) {
  39. if (res.statusCode === 200) {
  40. var codeSrc = res.tempFilePath;
  41. that.sharePosteCanvas(avaterSrc, codeSrc);
  42. }
  43. }
  44. })
  45. },
  46.  
  47. /**
  48. * 开始用canvas绘制分享海报
  49. * @param avaterSrc 下载的头像图片路径
  50. * @param codeSrc 下载的二维码图片路径
  51. */
  52. sharePosteCanvas: function (avaterSrc, codeSrc) {
  53. wx.showLoading({
  54. title: '生成中...',
  55. mask: true,
  56. })
  57. var that = this;
  58. var cardInfo = that.data.cardInfo; //需要绘制的数据集合
  59. const ctx = wx.createCanvasContext('myCanvas'); //创建画布
  60. var width = "";
  61. wx.createSelectorQuery().select('#canvas-container').boundingClientRect(function (rect) {
  62. var height = rect.height;
  63. var width = rect.width;
  64. console.log(height, width)
  65. var left = 0;
  66. console.log(left)
  67. ctx.setFillStyle('#fff');
  68. ctx.fillRect(0, 0, width, height);
  69.  
  70. //头像为正方形
  71. if (avaterSrc) {
  72. ctx.drawImage(avaterSrc, left, 0, width, width*0.93);//链接, 左边距/上边距/宽度/高度/
  73. }
  74.  
  75. //姓名
  76. if (cardInfo.Name) {
  77. ctx.setFontSize(14);
  78. ctx.setFillStyle('#666');
  79. // ctx.setTextAlign('left');
  80. ctx.fillText(cardInfo.Name, width * 0.15 + 18, width * 0.93+60);
  81. }
  82.  
  83. // 绘制二维码 + 头像
  84. if (codeSrc) {
  85. ctx.drawImage(codeSrc, width - width * 0.2 - 15, width * 0.93 + 17, width * 0.2, width * 0.2)
  86. ctx.drawImage(codeSrc, 12, width, width * 0.15, width * 0.15)
  87. }
  88. }).exec()//注意一点的是保存图片时需要延迟,这是老版的写法,没有啥问题,新版写法可以通过draw回调画图成功后调用保存图片的api wx.canvasToTempFilePath。这个时候就不需要写延时保存图片。
  89. setTimeout(function () {
  90. ctx.draw();
  91. wx.hideLoading();
  92. }, 1000)
  93. }
  94. })

小程序生成海报demo的更多相关文章

  1. 小程序生成海报图片(或者原有的)并下载,&&相册授权&&按钮拉起二次授权

    这是自己做小程序生成推广海报,并保存到本地相册的方法,向后台发起请求,返回一个海报图片,下载保存到相册, 如果只是单纯的下载图片代码43行-63行就足够了 如果想直接保存到相册,则不要做downFil ...

  2. 小程序生成海报 canvas

    前言 微信小程序需要生成海报进行朋友圈分享,但是不同的手机会有问题, 然后首先是图片的问题 图片 在模拟器上没有报错,可是真机测试却什么也没画出来. canvas.drawImage 是不支持网络图片 ...

  3. 小程序生成海报:通过 json 配置方式轻松制作一张海报图

    背景 由于我们无法将小程序直接分享到朋友圈,但分享到朋友圈的需求又很多,业界目前的做法是利用小程序的 Canvas 功能生成一张带有二维码的图片,然后引导用户下载图片到本地后再分享到朋友圈.而小程序 ...

  4. 微信小程序生成海报分享:canvas绘制文字溢出如何换行

    主要思路: 1.先分割为字符串数组,然后一个字一个字绘图,利用ctx.measureText(string) 方法,获取绘制后的宽度,判断宽度在多少内就另起一行,再将各行拼成一个字符串 2.计算另起的 ...

  5. 微信小程序生成海报保存图片到相册小测试

    test.wxml <canvas style="width:{{imageWidth}}px;height:{{imageHeight}}px;" canvas-id=&q ...

  6. 微信小程序开源Demo精选

    来自:http://www.jianshu.com/p/0ecf5aba79e1 文/weapphome(简书作者)原文链接:http://www.jianshu.com/p/0ecf5aba79e1 ...

  7. 微信小程序生成太阳码

    微信小程序生成太阳码 https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token=access_token 必须通过POST提交 而且参数 ...

  8. 【福利】微信小程序精选Demo合集

    小编最近在开发小程序,也读到了不少优秀的小程序源码,项目中有些需求可以直接从源码里粘贴复制过来,虽然这样做不利于自己独立编写代码,但比较是给公司做项目啊,秉着效率第一的原则,简直没有什么比ctrl+c ...

  9. 小程序生成商品分享二维码海报解决方案和实现方式JAVA

    使用技术:  Graphics , 七牛云 , 微信sdk(github上非常出名的wxjava,地址https://github.com/Wechat-Group/WxJava/)直接上干货代码,每 ...

随机推荐

  1. HBase面试

    宕机问题: MapReduce读写HBase HBase特点: 1.大:一个表可以有上亿行,上百万列 2.面向列:面向列表(蔟)的存储和权限控制,列(蔟)独立检索 3.稀疏:对于为空(NULL)的列, ...

  2. think php 删除

    表单页面 <a href="/examtest/test/edit/id/{$v['id']}">修改</a> <a href="/exam ...

  3. 记一次mybatis-plus遇到的问题

    在用了 springboot 和 mybatis-plus很久之后, 有一天突然看到配置文件有点繁杂, 想将相同的配置拉到application.yml里, 就在将配置拉过去后, 问题就开始出现了. ...

  4. 从此 Typora 代码块有了颜色

    起因 平时喜欢用typora记笔记,但是typora默认代码块没有指定语言,没有高亮看着很不舒服,所以用Autohotkey花了半天写了个脚本,按自己的快捷键就可以自动生成代码块并添加语言,这样就方便 ...

  5. Django基础八之认证模块---auth

    Django基础八之认证模块---auth 目录 Django基础八之认证模块---auth 1. auth介绍 2. autho常用操作 2.1 创建用户 2.2 验证用户 2.3 验证用户是否登录 ...

  6. vue2.x版本中computed和watch的使用入门详解-computed篇

    前言 在基于vue框架的前端项目开发过程中,只要涉及到稍微复杂一点的业务,我们都会用到computed计算属性这个钩子函数,可以用于一些状态的结合处理和缓存的操作. 基础使用 在computed中,声 ...

  7. K8S搭建自动化部署环境 Jenkins下载、安装和启动

    镜像下载.域名解析.时间同步请点击 阿里云开源镜像站 一.jenkins 下载 jenkins下载地址:https://jenkins.io/zh/download/ 如下图,左边是稳定版本,右边是每 ...

  8. 【Java分享客栈】Java程序员为争一口气熬夜硬刚CSS实现掘金首页

    前言 如果我做不了最厉害的Java工程师,那我就做Java工程师中最厉害的前端工程师. 前段时间,我默默给自己又喂了这碗心灵鸡汤-- 我不是很厉害的Java工程师,哪怕我已经工作八年,我依然觉得自己和 ...

  9. [FromBody]List<string> 用PostMan如何请求

    在MVC项目,写了一个API方法,如下: /// <summary>/// 测试/// </summary>/// <param name="idList&qu ...

  10. SpringMVC实现文件上传功能

    文件上传 文件上传要求form表单的请求方式必须为post,并且添加属性enctype="multipart/form-data" SpringMVC中将上传的文件封装到Multi ...