import { deepCopy } from '../common/utils.js' /** 重要事件分享图绘制 * @param {Object} option 参数 * @param {Object} this 上下文 * @param {Object} el canvasid * @param {Object} createCodeImg 随机四位数 */ let getOptions; export function createCanvas(options) { return new Promise(function(resolve, reject) { let fontSize = options.height * 3 / 6; let ctx = uni.createCanvasContext(options.el, this); ctx.setTextBaseline("middle"); ctx.setFillStyle(randomColor(180, 240)); //生成随机数 var code = ''; var txtArr = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q','r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O','P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z',0,1,2,3,4,5,6,7,8,9] for(var i=0;i<4;i++){ code += txtArr[randomNum(0, txtArr.length)]; } options.createCodeImg = code; let arr = (code + '').split(''); if (arr.length === 0) { arr = ['e', 'r', 'r','o','r']; }; let offsetLeft = options.width * 0.6 / (arr.length - 1); let marginLeft = options.width * 0.2; arr.forEach((item, index) => { ctx.setFillStyle(randomColor(0, 180)); let size = randomNum(32, fontSize); ctx.setFontSize(size); let dis = offsetLeft * index + marginLeft - size * 0.3; let deg = randomNum(-30, 30); ctx.translate(dis, options.height*0.5); ctx.rotate(deg * Math.PI / 180); ctx.fillText(item, 0, 0); ctx.rotate(-deg * Math.PI / 180); ctx.translate(-dis, -options.height * 0.5); }) for (var i = 0; i < 4; i++) { ctx.strokeStyle = randomColor(40, 180); ctx.beginPath(); ctx.moveTo(randomNum(0, options.width), randomNum(0,options.height)); ctx.lineTo(randomNum(0, options.width), randomNum(0, options.height)); ctx.stroke(); } for (var i = 0; i < options.width / 4; i++) { ctx.fillStyle = randomColor(0, 255); ctx.beginPath(); ctx.arc(randomNum(0, options.width), randomNum(0, options.height), 1, 0, 2 * Math.PI); ctx.fill(); } ctx.save(); // 获取系统信息 const result = uni.getSystemInfoSync(); const platform = result.platform; let time = 0; if (platform === 'android') { // 在安卓平台,如果海报过于复杂在转换时需要做延时,否则样式会错乱 time = 300; } // this.ctx.draw(); getOptions = deepCopy(options); ctx.draw(false, function() { setTimeout(function() { //将canvas转换成临时图片文件 wx.canvasToTempFilePath({ width: '140', height: '70', canvasId: options.el, fileType: 'png', success(res) { console.log('生成成功'); console.log(res.tempFilePath, '111'); resolve(res.tempFilePath); }, fail(err) { console.log('生成失败'); console.log('canvasToTempFilePath err', err); reject(err); }, complete() { console.log('成功、失败都走的回调'); } }, this); }, time); }); }) } export function validateCode(code) { var code = code.toLowerCase(); var v_code = getOptions.createCodeImg.toLowerCase(); if (code == v_code.substring(v_code.length - 4)) { return true; } else { return false; } } function randomNum(min, max) { return Math.floor(Math.random() * (max - min) + min); } function randomColor(min, max) { let r = randomNum(min, max); let g = randomNum(min, max); let b = randomNum(min, max); return "rgb(" + r + "," + g + "," + b + ")"; }