|
@@ -25,7 +25,8 @@ Page({
|
|
|
'https://ts1.cn.mm.bing.net/th/id/R-C.d8333a26a5494dfe1dc88e9fdd04fb31?rik=08fpnYZSbboHfQ&riu=http%3a%2f%2fpic.ibaotu.com%2fspiders%2f33817-59a6262d3ff70.jpg&ehk=fKs2FTTgk2k0kqet%2fVO%2bAS3D0Q6zlNyUPmT8UE%2bvpdY%3d&risl=&pid=ImgRaw&r=0',
|
|
|
'https://pic.nximg.cn/file/20230420/12106414_122949747127_2.jpg'
|
|
|
],
|
|
|
- randomImage:''
|
|
|
+ randomImage: '',
|
|
|
+ saveimage: ''
|
|
|
},
|
|
|
|
|
|
|
|
@@ -147,6 +148,7 @@ Page({
|
|
|
this.setData({
|
|
|
sharList
|
|
|
});
|
|
|
+ this.saveImage()
|
|
|
console.log(this.data.sharList);
|
|
|
},
|
|
|
|
|
@@ -156,4 +158,294 @@ Page({
|
|
|
randomImage: this.data.images[randomIndex]
|
|
|
});
|
|
|
},
|
|
|
+
|
|
|
+ rpxToPx(rpx) {
|
|
|
+ const systemInfo = wx.getSystemInfoSync();
|
|
|
+ return rpx * (systemInfo.windowWidth / 750);
|
|
|
+ },
|
|
|
+
|
|
|
+ saveImage() {
|
|
|
+
|
|
|
+ const canvas = wx.createCanvasContext('myCanvas');
|
|
|
+ const width = this.rpxToPx(670);
|
|
|
+ const height = this.rpxToPx(1100);
|
|
|
+
|
|
|
+ canvas.width = this.rpxToPx(670);
|
|
|
+ canvas.height = this.rpxToPx(1100);
|
|
|
+
|
|
|
+
|
|
|
+ canvas.setFillStyle('#CAE1FD');
|
|
|
+ canvas.fillRect(0, 0, width, height);
|
|
|
+ canvas.setFillStyle('#0178EE');
|
|
|
+
|
|
|
+
|
|
|
+ wx.getImageInfo({
|
|
|
+ src: this.data.randomImage,
|
|
|
+ success: (res) => {
|
|
|
+ canvas.drawImage(res.path, 0, 0, width, this.rpxToPx(500));
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ wx.getImageInfo({
|
|
|
+ src: this.data.sharList[0].user.avatar,
|
|
|
+ success: (avatarRes) => {
|
|
|
+
|
|
|
+ const avatarX = this.rpxToPx(40);
|
|
|
+ const avatarY = this.rpxToPx(540);
|
|
|
+ const avatarSize = this.rpxToPx(83);
|
|
|
+ const radius = avatarSize / 2;
|
|
|
+
|
|
|
+
|
|
|
+ canvas.save();
|
|
|
+ canvas.beginPath();
|
|
|
+ canvas.moveTo(avatarX + radius, avatarY);
|
|
|
+ canvas.lineTo(avatarX + avatarSize - radius, avatarY);
|
|
|
+ canvas.arc(avatarX + avatarSize - radius, avatarY + radius, radius, 1.5 * Math.PI, 0, false);
|
|
|
+ canvas.lineTo(avatarX + avatarSize, avatarY + avatarSize - radius);
|
|
|
+ canvas.arc(avatarX + avatarSize - radius, avatarY + avatarSize - radius, radius, 0, 0.5 * Math.PI, false);
|
|
|
+ canvas.lineTo(avatarX + radius, avatarY + avatarSize);
|
|
|
+ canvas.arc(avatarX + radius, avatarY + avatarSize - radius, radius, 0.5 * Math.PI, Math.PI, false);
|
|
|
+ canvas.lineTo(avatarX, avatarY + radius);
|
|
|
+ canvas.arc(avatarX + radius, avatarY + radius, radius, Math.PI, 1.5 * Math.PI, false);
|
|
|
+ canvas.closePath();
|
|
|
+ canvas.clip();
|
|
|
+
|
|
|
+
|
|
|
+ canvas.drawImage(avatarRes.path, avatarX, avatarY, avatarSize, avatarSize);
|
|
|
+ canvas.restore();
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ const nickname = this.data.sharList[0].user.nickname;
|
|
|
+ const currentTime = this.data.sharList[0].currentTime;
|
|
|
+ const rank = this.data.sharList[0].rank;
|
|
|
+ const steps = this.data.sharList[0].steps || 0;
|
|
|
+ const distance = this.data.sharList[0].distance || 0;
|
|
|
+
|
|
|
+ canvas.setFontSize(this.rpxToPx(30));
|
|
|
+ canvas.fillText(nickname, this.rpxToPx(140), this.rpxToPx(580));
|
|
|
+
|
|
|
+ canvas.setFontSize(this.rpxToPx(28));
|
|
|
+ canvas.fillText(currentTime, this.rpxToPx(140), this.rpxToPx(610));
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ canvas.setFontSize(this.rpxToPx(55));
|
|
|
+ canvas.fillText('梦想家', this.rpxToPx(40), this.rpxToPx(720));
|
|
|
+
|
|
|
+ canvas.setFontSize(this.rpxToPx(30));
|
|
|
+ canvas.fillText('用汗水实现想象,用脚步丈量梦想', this.rpxToPx(40), this.rpxToPx(780));
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ canvas.setFontSize(this.rpxToPx(28));
|
|
|
+
|
|
|
+ canvas.fillText('今日排名', this.rpxToPx(40), this.rpxToPx(840));
|
|
|
+
|
|
|
+
|
|
|
+ canvas.fillText('今日步数', this.rpxToPx(240), this.rpxToPx(840));
|
|
|
+
|
|
|
+
|
|
|
+ canvas.fillText('公里数', this.rpxToPx(440), this.rpxToPx(840));
|
|
|
+
|
|
|
+ canvas.setFontSize(this.rpxToPx(40));
|
|
|
+ canvas.fillText(rank, this.rpxToPx(80), this.rpxToPx(900));
|
|
|
+ canvas.fillText(steps, this.rpxToPx(240), this.rpxToPx(900));
|
|
|
+ canvas.fillText(distance + 'km', this.rpxToPx(444), this.rpxToPx(900));
|
|
|
+
|
|
|
+
|
|
|
+ canvas.setFillStyle('red');
|
|
|
+ canvas.fillRect(width - this.rpxToPx(140), height - this.rpxToPx(160), this.rpxToPx(120), this.rpxToPx(120));
|
|
|
+
|
|
|
+
|
|
|
+ canvas.setFillStyle('#0178EE');
|
|
|
+ canvas.setFontSize(this.rpxToPx(28));
|
|
|
+ canvas.fillText('长按二维码加入跑团', width - this.rpxToPx(420), height - this.rpxToPx(120));
|
|
|
+ canvas.fillText('和我一起运动', width - this.rpxToPx(380), height - this.rpxToPx(80));
|
|
|
+
|
|
|
+ canvas.draw(false, () => {
|
|
|
+ console.log('123');
|
|
|
+ wx.canvasToTempFilePath({
|
|
|
+ canvasId: 'myCanvas',
|
|
|
+ success: (res) => {
|
|
|
+ console.log('绘制完成', res);
|
|
|
+ this.setData({
|
|
|
+ saveimage: res.tempFilePath
|
|
|
+ });
|
|
|
+ console.log(this.data.saveimage);
|
|
|
+ },
|
|
|
+ fail: (err) => {
|
|
|
+ console.error('canvasToTempFilePath 失败', err);
|
|
|
+ }
|
|
|
+ });
|
|
|
+ });
|
|
|
+ },
|
|
|
+ fail: () => {
|
|
|
+ console.error('用户头像加载失败');
|
|
|
+ }
|
|
|
+ });
|
|
|
+ },
|
|
|
+ fail: () => {
|
|
|
+ console.error('主图片加载失败');
|
|
|
+ }
|
|
|
+ });
|
|
|
+
|
|
|
+ },
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ async savepic() {
|
|
|
+ await this.saveImage()
|
|
|
+ const imagePath = this.data.saveimage;
|
|
|
+ if (imagePath) {
|
|
|
+
|
|
|
+ wx.saveImageToPhotosAlbum({
|
|
|
+ filePath: imagePath,
|
|
|
+ success: () => {
|
|
|
+ wx.showToast({
|
|
|
+ title: '保存成功',
|
|
|
+ icon: 'success'
|
|
|
+ });
|
|
|
+ },
|
|
|
+ fail: (err) => {
|
|
|
+ console.error('保存失败', err);
|
|
|
+ wx.showToast({
|
|
|
+ title: '保存失败',
|
|
|
+ icon: 'none'
|
|
|
+ });
|
|
|
+ }
|
|
|
+ });
|
|
|
+ } else {
|
|
|
+ wx.showToast({
|
|
|
+ title: '没有可保存的图片',
|
|
|
+ icon: 'none'
|
|
|
+ });
|
|
|
+ }
|
|
|
+ }
|
|
|
})
|