const { API_BASE_URL, IMG_BASE_URL } = require('../api/api') const utils = require('./util') const canvasLocationImg = "../../img/canvas-location.png"; //定位图标 const canvasPeopleImg = "../../img/canvas-people.png"; //人员图标 const imageCodeImgBg = "../../img/map-bg.png"; //小程序二维码图背景 /** * * 绘制水印 * * @param {*} tempFilePath 图片路径 * @param {*} photoName * @param {*} data 数据源 */ function addWatermark(tempFilePath, photoName, data) { return new Promise(async (resolve, reject) => { wx.showLoading({ title: '绘制图片中', mask: true }) console.log("页面数据", data.customerAddress) const dpr = wx.getSystemInfoSync().pixelRatio; //canvas的宽和高 const { canvasHeight, canvasWidth } = data //阴影的高度 const shadowHeight = Math.min(canvasWidth, canvasHeight) * 0.2 //创建画笔 const ctx = data.canvas.getContext('2d') //设置画布大小 data.canvas.width = canvasWidth * dpr data.canvas.height = canvasHeight * dpr ctx.scale(dpr, dpr) // 创建图片对象 const image = data.canvas.createImage(); //设置图片路径 image.src = tempFilePath; //绘制照片 image.onload = () => { //绘制定位图标 const imageLocation = data.canvas.createImage(); imageLocation.src = canvasLocationImg imageLocation.onload = () => { ctx.drawImage(imageLocation, shadowHeight * 0.075, canvasHeight - shadowHeight * 0.45, shadowHeight * 0.4, shadowHeight * 0.4) } //绘制人员图标 const imagePeople = data.canvas.createImage(); imagePeople.src = canvasPeopleImg imagePeople.onload = () => { ctx.drawImage(imagePeople, shadowHeight * 0.075, canvasHeight - shadowHeight * 0.95, shadowHeight * 0.4, shadowHeight * 0.4) } //绘制小程序二维码图 const imageCodeBg = data.canvas.createImage(); imageCodeBg.src = imageCodeImgBg; imageCodeBg.onload = () => { const imageCode = data.canvas.createImage(); imageCode.src = data.imageCodeImg ? data.imageCodeImg : '' // imageCode.src = 'https://sf-hd1-stimgs.oss-cn-hangzhou.aliyuncs.com//sfimg03/png/20210803/40ae583526054e83a9958a3a80f89295.png' imageCode.onload = () => { // ctx.drawImage(imageCode, canvasWidth - shadowHeight * 1.2 - 8, 8, shadowHeight * 1.2, shadowHeight * 1.2) ctx.drawImage(imageCode, canvasWidth - shadowHeight*1.03 - 8 + shadowHeight*0.03/2, 8 + shadowHeight*0.03/3, shadowHeight * 1, shadowHeight * 1) } ctx.drawImage(imageCodeBg, canvasWidth - shadowHeight * 1.03 - 8, 8, shadowHeight * 1.03, shadowHeight * 1.23) } //绘制小程序码下文字 // ctx.fillText("扫码导航", canvasWidth - shadowHeight * 1.2 - 8, 8 + shadowHeight * 1.2) ctx.drawImage(image, 0, 0, canvasWidth, canvasHeight) //绘制黑色背景矩形 //绘制黑色渐变背景矩形 const grd = ctx.createLinearGradient(0, 0, canvasWidth, 0); grd.addColorStop(0, "rgba(0,0,0,0.8)"); grd.addColorStop(1, "rgba(255,255,255,0.4)"); ctx.fillStyle = grd; ctx.fillRect(0, canvasHeight - shadowHeight, canvasWidth, shadowHeight) //设置画笔颜色 ctx.fillStyle = '#ffffff'; //设置文字大小及字体 ctx.font = parseInt(shadowHeight * 0.15) + `px sans-serif` //绘制用户姓名 const name = data.data.name, phone = data.data.phone; ctx.fillText("业主姓名:" + `${name}` + ` ${phone}`, shadowHeight * 0.5, canvasHeight - shadowHeight * 0.8) //绘制勘测人员 const time = utils.formatTime(new Date()) wx.getStorage({ key: 'userName', success(res) { const surveyName = res.data ctx.fillText("踏勘人员:" + `${surveyName}` + "(" + `${time}` + ")", shadowHeight * 0.5, canvasHeight - shadowHeight * 0.6) } }) //绘制地点 ctx.fillText(`${data.customerAddress}` + ` ${data.direction?data.direction:''}`, shadowHeight * 0.5, canvasHeight - shadowHeight * 0.3) //绘制经纬度 ctx.fillText("经度:" + `${data.canvasLongitude}` + " " + "纬度:" + `${data.canvasLatitude}`, shadowHeight * 0.5, canvasHeight - shadowHeight * 0.1) //绘制完成后将canvas转为为图片 setTimeout(() => { wx.hideLoading() wx.showLoading({ title: '请稍后', mask: true }) console.log("基础库信息", wx.getSystemInfoSync().SDKVersion) wx.canvasToTempFilePath({ canvas: data.canvas, success: (res) => { console.log("绘制图片成功", res); wx.uploadFile({ url: API_BASE_URL + 'common/weChat/uploadImage', filePath: res.tempFilePath, name: 'file', complete: function (res) { wx.hideLoading() console.log("上传图片", res) if (res.statusCode == 200) { const item = { url: "", name: "", } item.url = IMG_BASE_URL + res.data; item.name = res.data; resolve(item) } else { wx.showToast({ title: "选择失败", icon: 'none' }) } } }) }, fail: (res) => { console.log("绘制图片失败", res) wx.showToast({ title: "绘制失败", icon: 'none' }) }, complete:()=>{ wx.stopCompass(); } }) }, 1000) } }) } module.exports = { addWatermark }