小程序生成海报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/)直接上干货代码,每 ...
随机推荐
- laravel 7七牛云文件上传
1:composer下载七牛云 composer require itbdw/laravel-storage-qiniu 2:打开 config 文件夹下的 app.php 文件,在 provider ...
- Mysql 8.0 配置主从备份
my.ini文件的位置 mysql 8.0安装完过后没有my.ini疑惑了我好久,最后发现,配置文件在,C盘的一个隐藏文件夹里面 具体路径如下图 主库配置 修改主库INI文件 在[mysqld]节点添 ...
- DataTemplate的用法
WPF 模板主要分为两大类:1.ControlTemplate: 控件的外观,也就是控件是什么样子.2.DataTemplate: 是数据内容的表现,一条数据显示成什么样子. (1)DataTemla ...
- Mybatis数据库分页
使用limit分页(sql语句) SELECT * FROM user limit 0,2 #从第0个开始查,查2个 使用Mybatis实现分页,核心还是sql(map) <select id= ...
- Windows安全加固手册
1 身份鉴别 1.1 密码安全策略 要求:操作系统和数据库系统管理用户身份鉴别信息应具有不易被冒用的特点,口令应有复杂度要求并定期更换. 目的:设置有效的密码策略,防止攻击者 ...
- ITerm让MAC终端更加灵活高效
一.ITerm2简介 1.安装 iTerm2 是一款完全免费的,专为 Mac OS 用户打造的命令行应用.直接在官网上http://iterm2.com/ 下载并安装即可. 2.配置 设置ITerm为 ...
- 《前端运维》五、k8s--3灰度发布、滚动更新与探针
一.灰度发布 灰度发布是一种发布方式,也叫金丝雀发布,起源是矿工在下井之前会先放一只金丝雀到井里,如果金丝雀不叫了,就代表瓦斯浓度高.原因是金丝雀对瓦斯气体很敏感.灰度发布的做法是:会在现存旧应用的基 ...
- 为什么 char 数组比 Java 中的 String 更适合存储密码?
另一个基于 String 的棘手 Java 问题,相信我只有很少的 Java 程序员可以正确回答这个问题.这是一个真正艰难的核心Java面试问题,并且需要对 String 的扎实知识才能回答这个问题. ...
- Dubbo 和 Spring Cloud 的区别?
根据微服务架构在各方面的要素,看看 Spring Cloud 和 Dubbo 都提供了哪些支 持. Dubbo Spring Cloud 服务注册中心 Zookeep er Spring Cloud ...
- SpringBoot的 Actuator 是做什么的?
本质上,Actuator 通过启用 production-ready 功能使得 SpringBoot 应用程序变得更有生命力.这些功能允许我们对生产环境中的应用程序进行监视和管理. 集成 Spring ...