小程序生成海报demo
效果图:
- <view class='poste_box' id='canvas-container' style="margin:0 auto;border-radius:16rpx;overflow:hidden;width:690rpx;height:846rpx">
- <canvas canvas-id="myCanvas" style="width:690rpx;height:846rpx;"></canvas>
- <!-- <canvas id="myCanvas" style="width:690rpx;height:846rpx;"></canvas> -->
- </view>
- Page({
- data: {
- cardInfo: {
- avater: "https://www.cnblogs.com/images/cnblogs_com/520BigBear/1196074/t_dog.jpg", //需要https图片路径
- qrCode: "https://www.cnblogs.com/images/cnblogs_com/520BigBear/1196074/t_love.jpg", //需要https图片路径
- Name: '大熊', //姓名
- }
- },
- onLoad: function () {
- this.getAvaterInfo();
- },
- /**
- * 先下载头像图片
- */
- getAvaterInfo() {
- var that = this;
- wx.downloadFile({
- url: that.data.cardInfo.avater, //头像图片路径
- success: function (res) {
- if (res.statusCode === 200) {
- var avaterSrc = res.tempFilePath; //下载成功返回结果
- that.getQrCode(avaterSrc); //继续下载二维码图片
- }
- }
- })
- },
- /**
- * 下载二维码图片
- */
- getQrCode(avaterSrc) {
- var that = this;
- wx.downloadFile({
- url: that.data.cardInfo.qrCode, //二维码路径
- success: function (res) {
- if (res.statusCode === 200) {
- var codeSrc = res.tempFilePath;
- that.sharePosteCanvas(avaterSrc, codeSrc);
- }
- }
- })
- },
- /**
- * 开始用canvas绘制分享海报
- * @param avaterSrc 下载的头像图片路径
- * @param codeSrc 下载的二维码图片路径
- */
- sharePosteCanvas: function (avaterSrc, codeSrc) {
- wx.showLoading({
- title: '生成中...',
- mask: true,
- })
- var that = this;
- var cardInfo = that.data.cardInfo; //需要绘制的数据集合
- const ctx = wx.createCanvasContext('myCanvas'); //创建画布
- var width = "";
- wx.createSelectorQuery().select('#canvas-container').boundingClientRect(function (rect) {
- var height = rect.height;
- var width = rect.width;
- console.log(height, width)
- var left = 0;
- console.log(left)
- ctx.setFillStyle('#fff');
- ctx.fillRect(0, 0, width, height);
- //头像为正方形
- if (avaterSrc) {
- ctx.drawImage(avaterSrc, left, 0, width, width*0.93);//链接, 左边距/上边距/宽度/高度/
- }
- //姓名
- if (cardInfo.Name) {
- ctx.setFontSize(14);
- ctx.setFillStyle('#666');
- // ctx.setTextAlign('left');
- ctx.fillText(cardInfo.Name, width * 0.15 + 18, width * 0.93+60);
- }
- // 绘制二维码 + 头像
- if (codeSrc) {
- ctx.drawImage(codeSrc, width - width * 0.2 - 15, width * 0.93 + 17, width * 0.2, width * 0.2)
- ctx.drawImage(codeSrc, 12, width, width * 0.15, width * 0.15)
- }
- }).exec()//注意一点的是保存图片时需要延迟,这是老版的写法,没有啥问题,新版写法可以通过draw回调画图成功后调用保存图片的api wx.canvasToTempFilePath。这个时候就不需要写延时保存图片。
- setTimeout(function () {
- ctx.draw();
- wx.hideLoading();
- }, 1000)
- }
- })
小程序生成海报demo的更多相关文章
- 小程序生成海报图片(或者原有的)并下载,&&相册授权&&按钮拉起二次授权
这是自己做小程序生成推广海报,并保存到本地相册的方法,向后台发起请求,返回一个海报图片,下载保存到相册, 如果只是单纯的下载图片代码43行-63行就足够了 如果想直接保存到相册,则不要做downFil ...
- 小程序生成海报 canvas
前言 微信小程序需要生成海报进行朋友圈分享,但是不同的手机会有问题, 然后首先是图片的问题 图片 在模拟器上没有报错,可是真机测试却什么也没画出来. canvas.drawImage 是不支持网络图片 ...
- 小程序生成海报:通过 json 配置方式轻松制作一张海报图
背景 由于我们无法将小程序直接分享到朋友圈,但分享到朋友圈的需求又很多,业界目前的做法是利用小程序的 Canvas 功能生成一张带有二维码的图片,然后引导用户下载图片到本地后再分享到朋友圈.而小程序 ...
- 微信小程序生成海报分享:canvas绘制文字溢出如何换行
主要思路: 1.先分割为字符串数组,然后一个字一个字绘图,利用ctx.measureText(string) 方法,获取绘制后的宽度,判断宽度在多少内就另起一行,再将各行拼成一个字符串 2.计算另起的 ...
- 微信小程序生成海报保存图片到相册小测试
test.wxml <canvas style="width:{{imageWidth}}px;height:{{imageHeight}}px;" canvas-id=&q ...
- 微信小程序开源Demo精选
来自:http://www.jianshu.com/p/0ecf5aba79e1 文/weapphome(简书作者)原文链接:http://www.jianshu.com/p/0ecf5aba79e1 ...
- 微信小程序生成太阳码
微信小程序生成太阳码 https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token=access_token 必须通过POST提交 而且参数 ...
- 【福利】微信小程序精选Demo合集
小编最近在开发小程序,也读到了不少优秀的小程序源码,项目中有些需求可以直接从源码里粘贴复制过来,虽然这样做不利于自己独立编写代码,但比较是给公司做项目啊,秉着效率第一的原则,简直没有什么比ctrl+c ...
- 小程序生成商品分享二维码海报解决方案和实现方式JAVA
使用技术: Graphics , 七牛云 , 微信sdk(github上非常出名的wxjava,地址https://github.com/Wechat-Group/WxJava/)直接上干货代码,每 ...
随机推荐
- HBase面试
宕机问题: MapReduce读写HBase HBase特点: 1.大:一个表可以有上亿行,上百万列 2.面向列:面向列表(蔟)的存储和权限控制,列(蔟)独立检索 3.稀疏:对于为空(NULL)的列, ...
- think php 删除
表单页面 <a href="/examtest/test/edit/id/{$v['id']}">修改</a> <a href="/exam ...
- 记一次mybatis-plus遇到的问题
在用了 springboot 和 mybatis-plus很久之后, 有一天突然看到配置文件有点繁杂, 想将相同的配置拉到application.yml里, 就在将配置拉过去后, 问题就开始出现了. ...
- 从此 Typora 代码块有了颜色
起因 平时喜欢用typora记笔记,但是typora默认代码块没有指定语言,没有高亮看着很不舒服,所以用Autohotkey花了半天写了个脚本,按自己的快捷键就可以自动生成代码块并添加语言,这样就方便 ...
- Django基础八之认证模块---auth
Django基础八之认证模块---auth 目录 Django基础八之认证模块---auth 1. auth介绍 2. autho常用操作 2.1 创建用户 2.2 验证用户 2.3 验证用户是否登录 ...
- vue2.x版本中computed和watch的使用入门详解-computed篇
前言 在基于vue框架的前端项目开发过程中,只要涉及到稍微复杂一点的业务,我们都会用到computed计算属性这个钩子函数,可以用于一些状态的结合处理和缓存的操作. 基础使用 在computed中,声 ...
- K8S搭建自动化部署环境 Jenkins下载、安装和启动
镜像下载.域名解析.时间同步请点击 阿里云开源镜像站 一.jenkins 下载 jenkins下载地址:https://jenkins.io/zh/download/ 如下图,左边是稳定版本,右边是每 ...
- 【Java分享客栈】Java程序员为争一口气熬夜硬刚CSS实现掘金首页
前言 如果我做不了最厉害的Java工程师,那我就做Java工程师中最厉害的前端工程师. 前段时间,我默默给自己又喂了这碗心灵鸡汤-- 我不是很厉害的Java工程师,哪怕我已经工作八年,我依然觉得自己和 ...
- [FromBody]List<string> 用PostMan如何请求
在MVC项目,写了一个API方法,如下: /// <summary>/// 测试/// </summary>/// <param name="idList&qu ...
- SpringMVC实现文件上传功能
文件上传 文件上传要求form表单的请求方式必须为post,并且添加属性enctype="multipart/form-data" SpringMVC中将上传的文件封装到Multi ...