都是canvas的简略利用,
其中有一个需要没有实现-->让把头像的图片解决成马赛克的款式,我没做进去,起初用色块给遮挡起来了
心愿有会这方面内容的大哥看到的话,指导指导~~

//绘制海报      drawPicture(){                let ewmUrl = `业务需要`        //生成二维码        qrcode.toDataURL(ewmUrl, {          type: "image/png", //类型          quality: 0.5, //图片品质A Number between 0 and 1          width: 130, //高度          height: 130, //宽度          errorCorrectionLevel: "L", //容错率          margin: 1, //外边距          color: {            dark: "#000", //前景色            light: "#fff" //背景色          }        }).then(imgData => {          this.baseCode = imgData        })        //画布        let ctx = uni.createCanvasContext('myCanvas', this);        //画布宽高        let imgW = this.$refs.draw_page.offsetWidth;        let imgH = this.$refs.draw_page.offsetHeight;        this.cwidth = imgW * 0.9;        this.cheight = imgH + 125;        //画布背景色        ctx.fillStyle='#fff';        ctx.fillRect(0, 0, this.cwidth, this.cheight);        //图片        let imgUrl = this.getSexDefaultImg        // 获取图片信息, 要依照原图来绘制, 否则图片会变形        uni.getImageInfo({          src: imgUrl,          success: info => {            //绘制顶部背景图logoImg            ctx.drawImage(this.logoImg, 0, 0, this.cwidth, 80)            //绘制头像            ctx.drawImage(info.path, this.cwidth/2 - 35, 45, 70, 70)            //密封头像(做马赛克,没做进去)            ctx.beginPath()            ctx.fillStyle = 'rgba(242, 176, 53, 1)'            ctx.setStrokeStyle('#fff')            ctx.arc(this.cwidth/2, 80, 35, 0, Math.PI * 2)            ctx.fill()                        //绘制密封文字            ctx.font = '16rpx Medium'            // 字体大小            ctx.fillStyle = '#fff'            // 字体填充色彩            ctx.fillText('密', this.cwidth/2 - 8, 85)            //绘制个人信息---名字            ctx.font = "18rpx Medium" // 字体大小            ctx.fillStyle = '#212121' //字体填充色彩            let name_position = this.cwidth/2 - this.jlUserInfo.name.length/2 * 16            let str = this.jlUserInfo.name.split('').map((item) => {              return '*'            })            let _name = str.join('')            ctx.fillText(_name, name_position + (this.jlUserInfo.name.length * 3), 150);            //绘制年纪...            ctx.font = '12rpx Medium'            // 字体大小            ctx.fillStyle = '#212121'            // 字体填充色彩            let age_position = this.cwidth/6 - this.jlUserInfo.age.length/2 * 12            ctx.fillText(this.jlUserInfo.age, age_position, 180)            //绘制竖线            ctx.font = '12rpx Medium'            // 字体大小            ctx.fillStyle = '#212121'            // 字体填充色彩            ctx.fillText('|', this.cwidth/3, 180)            //绘制教训...            ctx.font = '12rpx Medium'            // 字体大小            ctx.fillStyle = '#212121'            // 字体填充色彩            let ex_info = this.jlUserInfo.experienceYear == '无教训'? '暂无': this.jlUserInfo.experienceYear            let ex_position = this.cwidth/2 - ex_info.length/2 * 12            ctx.fillText(ex_info, ex_position + 3, 180)            //绘制竖线            ctx.font = '12rpx Medium'            // 字体大小            ctx.fillStyle = '#212121'            // 字体填充色彩            ctx.fillText('|', this.cwidth/3*2 - 12, 180)            //绘制学历...            ctx.font = '12rpx Medium'            // 字体大小            ctx.fillStyle = '#212121'            // 字体填充色彩            let edu_position = this.cwidth/3*2 + this.cwidth/6 - this.jlUserInfo.educationTypeName.length/2 * 12            ctx.fillText(this.jlUserInfo.educationTypeName, edu_position, 180)            //绘制分隔色块            ctx.fillStyle='#faf8f5';            ctx.fillRect(0, 200, this.cwidth, 10);            //绘制求职意向            ctx.font = '17rpx Medium'            // 字体大小            ctx.fillStyle = '#000'            // 字体填充色彩            ctx.fillText('求职意向', 20, 240)            //冀望职位            ctx.font = '14rpx Medium'            // 字体大小            ctx.fillStyle = '#757575'            // 字体填充色彩            ctx.fillText(`冀望职位:${this.qzyxData.jobPositionThirdName ? this.qzyxData.jobPositionThirdName : ''}`, 20, 270)            //冀望地区            ctx.font = '14rpx Medium'            // 字体大小            ctx.fillStyle = '#757575'            // 字体填充色彩            let city = this.likeCity            if(city.length > 16){ //判断长度              city = city.substring(0,17) + '...'            }            ctx.fillText(`冀望地区:${city}`, 20, 290)            //冀望薪资            ctx.font = '14rpx Medium'            // 字体大小            ctx.fillStyle = '#757575'            // 字体填充色彩            let price = `${this.qzyxData.salaryMin}-${this.qzyxData.salaryMax}K`            if(!this.qzyxData.salaryMin ){  //判断显示方式              price = ''            }            ctx.fillText(`冀望薪资:${price}`, 20, 310)            //求职状态            ctx.font = '14rpx Medium'            // 字体大小            ctx.fillStyle = '#757575'            // 字体填充色彩            let job_status = this.stateTypeNameList[this.indexVal] ? this.stateTypeNameList[this.indexVal] : ''            if(!this.qzyxData.salaryMin ){  //判断显示方式              price = ''            }            ctx.fillText(`求职状态:${job_status}`, 20, 330)            //绘制分隔色块            ctx.fillStyle='#faf8f5';            ctx.fillRect(0, 350, this.cwidth, 10);            //开始绘制二维码区域            //左侧疏导文字            ctx.font = '14rpx Medium'            // 字体大小            ctx.fillStyle = '#000'            // 字体填充色彩            ctx.fillText('啦啦啦啦', this.cwidth/3 - 49, 400)            ctx.font = '14rpx Medium'            // 字体大小            ctx.fillStyle = '#000'            // 字体填充色彩            ctx.fillText('【长按辨认二维码】', this.cwidth/3 - 67, 420)            ctx.font = '14rpx Medium'            // 字体大小            ctx.fillStyle = '#757575'            // 字体填充色彩            ctx.fillText('获取更多信息,进一步沟通', this.cwidth/3 - 84, 440)            //绘制右侧二维码             ctx.drawImage(this.baseCode, this.cwidth/3*2, 370, 100, 100)          }        })        setTimeout(() => {        // uni-app必须加上提早,不然显示不进去, 亲测           ctx.stroke();          let that = this          ctx.draw(true,(ret)=>{  //必须加上  uniapp 没这儿玩意儿 显示不进去不比原生  不加能够显示                        uni.canvasToTempFilePath({ // 保留canvas为图片                            canvasId: 'myCanvas',                            quality: 1,                            complete(res) {                that.pictureUrl    = res.tempFilePath                                    // uni.setStorageSync('filePath',res.tempFilePath)  //保留临时文件门路到缓存                            }                        })                    });                  }, 100)        this.pictureOk = true      },