<view class="shareConTuwen">
<canvas canvas-id="posterCanvas" style="width:100%; height: 825rpx;"></canvas>
</view>
<view class="shareConBtn" @click="saveCanvasImg()">保存海报</view>
GetWxaCodeunLimit() {
var that = this
uni.showLoading({
title: '加载中...'
})
that.$http.sendRequest('url', 'POST', {
access_token: that.access_token,
scene: `sid=${this.shareItem.salemoduleid}&user=${uni.getStorageSync('userInfo').userId}`,
page: 'pages/subPages/packageDetail',
check_path: false,
env_version: "",
width: "",
auto_color: "",
is_hyaline: ""
}).then(function(res) {
uni.hideLoading()
var bufferImg = res.data.result
var imgData = bufferImg.replace(/[\r\n]/g, '')
const fs = wx.getFileSystemManager();
const times = new Date().getTime();
const codeimg = wx.env.USER_DATA_PATH + '/' + times + '.jpeg';
fs.writeFile({
filePath: codeimg,
data: imgData,
encoding: 'base64',
success: (res) => {
that.bufferImg = codeimg
}
});
})
},
drawCanvas() {
const ctx = uni.createCanvasContext('posterCanvas');
const sysInfo = uni.getSystemInfoSync();
const canvasWidth = sysInfo.windowWidth * 0.8;
ctx.setFillStyle('white');
ctx.fillRect(0, 0, canvasWidth, 825);
ctx.drawImage(this.bufferImg, canvasWidth - 80, 320, 68, 68);
const nickname = this.userInfo.infoName;
const nicknameFontSize = 12;
const nicknameFontColor = 'black';
const trailingText = '为您推荐';
const trailingTextFontSize = 12;
const trailingTextColor = 'gray';
ctx.setFontSize(nicknameFontSize);
ctx.setFillStyle(nicknameFontColor);
ctx.fillText(nickname, 70, 337);
const nicknameWidth = ctx.measureText(nickname).width;
const trailingTextX = 70 + nicknameWidth + 10;
ctx.setFontSize(trailingTextFontSize);
ctx.setFillStyle(trailingTextColor);
ctx.fillText(trailingText, trailingTextX, 337);
ctx.setFontSize(11);
ctx.fillStyle = 'black';
ctx.fillText(this.shareItem.salemodulename, 70, 365);
ctx.setFontSize(11);
ctx.fillStyle = '#969696';
var xianshiPrice = '限时价:'
ctx.fillText(xianshiPrice, 30, 401);
const orgprice = '¥' + this.shareItem.orgprice;
ctx.setFontSize(22);
ctx.fillStyle = '#FF0C01';
ctx.fillText(orgprice, 72, 405);
var curpriceX = ctx.measureText(xianshiPrice).width + ctx.measureText(orgprice).width + 10
ctx.setFontSize(12);
ctx.fillStyle = '#969696';
const curprice = '¥' + this.shareItem.curprice;
ctx.fillText(curprice, curpriceX, 401);
const textWidth = ctx.measureText(curprice).width;
ctx.beginPath();
ctx.setStrokeStyle = "#969696";
ctx.setLineWidth(0.5);
ctx.moveTo(curpriceX, 396);
ctx.lineTo(curpriceX + textWidth, 396);
ctx.stroke();
var imgWidth = canvasWidth;
var imgHeight = 290;
var imgX = 0;
var imgY = 0;
var cornerRadius = 10;
ctx.save();
ctx.beginPath();
ctx.moveTo(imgX + cornerRadius, imgY);
ctx.arcTo(imgX + imgWidth, imgY, imgX + imgWidth, imgY + cornerRadius, cornerRadius);
ctx.lineTo(imgX + imgWidth, imgY + imgHeight);
ctx.lineTo(imgX, imgY + imgHeight);
ctx.lineTo(imgX, imgY + cornerRadius);
ctx.arc(imgX + cornerRadius, imgY + cornerRadius, cornerRadius, Math.PI, 1.5 * Math
.PI);
ctx.closePath();
ctx.clip();
ctx.drawImage(this.product.imgUrl, imgX, imgY, imgWidth, imgHeight);
ctx.restore()
const imageWidth = 50;
const imageHeight = 50;
const borderRadius = imageWidth / 2;
const centerX = 10 + imageWidth / 2;
const centerY = 305 + imageHeight / 2;
uni.getImageInfo({
src: this.userInfo.imgUrl,
success: (res) => {
ctx.beginPath();
ctx.arc(centerX, centerY, borderRadius, 0, 2 * Math.PI);
ctx.closePath();
ctx.clip();
ctx.drawImage(res.path, centerX - imageWidth / 2, centerY - imageHeight / 2,
imageWidth, imageHeight);
ctx.draw(false, () => {
console.log('整个 canvas 绘制完成');
});
},
fail: (err) => {
console.error('获取图片信息失败', err);
}
});
},
createPoster() {
uni.getImageInfo({
src: this.shareItem.imgurl,
success: (res) => {
this.product.imgUrl = res.path;
this.drawCanvas();
},
fail: (err) => {
console.log(err);
}
});
},
shareConNavEvt(index) {
this.shareNavIndex = index
if (index == 1) {
this.createPoster()
}
},
saveCanvasImg() {
uni.canvasToTempFilePath({
canvasId: 'posterCanvas',
success: (res) => {
console.log(res.tempFilePath);
uni.saveImageToPhotosAlbum({
filePath: res.tempFilePath,
success: () => {
uni.showToast({
title: '保存成功',
icon: 'success',
})
},
fail: (err) => {
console.error('保存海报失败:', err);
}
});
},
fail: (err) => {
console.error('生成海报时发生错误:', err);
}
});
}