//绘图
getCanvas(index){
var self=this;
console.log('绘图')
const query = wx.createSelectorQuery();
query.select("#shareCanvas0")
.fields({
node: true,
size: false
}).exec((res) => {
const canvas = res[0].node;
const ctx = canvas.getContext('2d');
canvas.width = 1144;
canvas.height = 2392;
self.setData({
drawing: true,
})
new Promise(function (resolve) {
// 绘制背景图片
wx.getImageInfo({
src: self.data.posterBg, //网络图片
success(res) {
const img = canvas.createImage();
img.src = res.path;
img.onload = () => {
ctx.drawImage(img, 0, 0, 1144, 2392);
resolve(true);
}
}
})
}).then(function () {
return new Promise(function(resolve){
// 绘制姓名
ctx.font ="500 56px Arial";
ctx.fillStyle = '#343434';
ctx.fillText(app.globalData.student.name, 260, 104)
resolve(true);
})
}).then(function () {
return new Promise(function(resolve){
// 绘制姓名
ctx.font ="400 40px Arial";
ctx.fillStyle = '#9A9A9A';
ctx.fillText('邀你来体验跟动体能直播课~', 256, 176)
resolve(true);
})
}).then(function () {
return new Promise((resolve)=>{
let posterimg=self.data.images[index].img;
console.log(index, self.data.images)
wx.getImageInfo({
src: posterimg, //网络图片.海报图片
success(res) {
const img = canvas.createImage();
img.src = res.path;
img.onload = () => {
ctx.drawImage(img, 36, 244, 1076, 1628);
resolve(true);
}
}
})
})
}).then(function () {
return new Promise(function(resolve){
// 获取二维码
shareQr().then(res=>{
self.setData({
base64Qr:'data:image/png;base64,' + res//base64的二维码
})
// 绘制二维码
const qrImg = canvas.createImage();
qrImg.src = self.data.base64Qr;
qrImg.onload = () => {
ctx.drawImage(qrImg, 784, 1976, 320, 320);
resolve(true);
}
qrImg.onerror = (err) => {
console.log(err);
resolve(true)
}
})
})
}).then(function () {
return new Promise(function(resolve){
// 绘制虚线
ctx.save();
ctx.setLineDash([3,6]);
ctx.lineWidth = 4;
ctx.strokeStyle = '#e3e3e3';
ctx.beginPath();
ctx.moveTo(96, 1936);
ctx.lineTo(1040, 1936);
ctx.stroke();
resolve(true);
})
}).then(function () {
return new Promise(function(resolve){
// 绘制文字
ctx.font ="500 56px Arial";
ctx.fillStyle = '#343434';
ctx.fillText('超值体验', 63.6, 2108)
ctx.fillText('元', 480, 2108)
ctx.font ="500 132px Arial";
ctx.fillStyle = '#FF7A00';
ctx.fillText('9.9', 300, 2108)
ctx.font ="500 56px Arial";
ctx.fillStyle = '#343434';
ctx.fillText('体验价值', 63.6, 2276)
ctx.font ="500 96px Arial";
ctx.fillStyle = '#FF7A00';
ctx.fillText('299', 300, 2276)
ctx.font ="500 56px Arial";
ctx.fillStyle = '#343434';
ctx.fillText('元的直播课程', 460, 2276)
resolve(true);
})
}).then(function () {
return new Promise(function(resolve){
// 设置直线的颜色
ctx.save();
ctx.beginPath();
ctx.setLineDash([3,0]);
ctx.strokeStyle = "#FF7A00";
ctx.moveTo(300, 2240);
// 设置直线的终点坐标
ctx.lineTo(460, 2240);
// 设置直线的粗细
ctx.lineWidth = "4";
// 设置直线两端的样式(线帽) butt | round | square
ctx.lineCap = "round";
// 绘制线条(通过描边的方式绘制图形)
ctx.stroke();
ctx.restore();
resolve(true);
})
}).then(function () {
// 绘制头像
return new Promise(function(resolve){// 绘制头像圆形边框
let avatar = app.globalData.student.avatar || app.oss_pic_prefix_url + "/wechat/static/student.png"
wx.getImageInfo({
src: avatar, //网络图片
success(res) {
const avatarImg = canvas.createImage();
avatarImg.src = res.path;
avatarImg.onload = () => {
ctx.save();
ctx.beginPath();
ctx.arc(124, 116, 80, 0, Math.PI * 2, false);
ctx.clip();
ctx.drawImage(avatarImg, 44, 36, 160, 160);
ctx.restore();
// console.log('绘制头像')
resolve(true);
}
}
})
})
}).then(function () {
return new Promise(function(resolve){
// console.log('绘制完毕,转换成图片')
self.transferCanvasToImage(canvas, index)
resolve(true);
})
}).catch((err) => {
console.log(err)
self.setData({
drawing: false,
})
self.data.loading && wx.hideLoading()
})
})
},
//把当前画布指定区域的内容导出生成指定大小的图片
transferCanvasToImage(canvas, index) {
const self = this;
wx.canvasToTempFilePath({
canvas: canvas,
success(res){
console.log('canvas分享图片地址', res.tempFilePath)
self.data.loading && wx.hideLoading()
self.setData({
loading: false,
drawing: false
})
self.setData({ canvasImg0: res.tempFilePath})
}
})
},