小程序canvas画图首次弹出会显示空白的解决办法(canvas图片显示白边问题)

903 阅读1分钟

tips:canvasToTempFilePath生成图片的方法写在draw里面

开始画图

drawCanvas() {
  if(!this.hasimg){
    const ctx = uni.createCanvasContext('myCanvas');
    //背景图片
    var codeurl = this.codeurl
    var bgurl = this.bgurl
    var avaurl = this.avaurl
    var tel=this.tel
    var code="邀请码:"+this.info.ReferralCode
	console.log(codeurl)
    //画布背景填色
    ctx.setFillStyle('#ffffff')
    ctx.fillRect(0, 350, 300, 500);
    // ctx.setFillStyle('#5A4ABA')
    // ctx.fillRect(0, 0, 300, 32);
    //图片
    ctx.drawImage(bgurl, 0, 0, 300,370);
    ctx.drawImage(avaurl, 12, 410, 50,50); //头像没有路径
	
    //说明文字
    ctx.setFontSize(12)
    ctx.setFillStyle('#333333')
    ctx.fillText(tel, 80, 420)
    ctx.setFontSize(9)
	ctx.setFillStyle('#5A4ABA')
	this.drawRoundedRect(ctx,"#7364ca","#7364ca",74,435,90,18,9);
    ctx.setFillStyle('#ffffff')
    ctx.fillText(code, 84, 447.5)
	
	ctx.rect(200, 400, 64,64)
	ctx.stroke()
	ctx.drawImage(codeurl, 200, 400, 64,64);
	
	//转为图片卸载draw里面
    ctx.draw(false,function(){
		uni.canvasToTempFilePath({
			canvasId: 'myCanvas',
			x: 0,
			y: 0,
			width: 300-10, //截取canvas的宽度(-10解决图片白边问题)
			height: 500, //截取canvas的高度
			destWidth: 300,    
			destHeight: 500,
			quality:1,
			fileType:'jpg',
			success: function (res){
				this.hasimg=true
				this.saveImgurl=res.tempFilePath;console.log( this.saveImgurl)
			}
		})
	})
  }
},

点击保存画布图片

Wxshare(){
  var _this=this
  uni.saveImageToPhotosAlbum({  //保存图片到相册
    filePath: this.saveImgurl,
    success: function () {
      uni.showToast({
        title: "图片保存成功!",
        duration: 2000
      })
      setTimeout(() => {
        uni.navigateBack({})
      }, 2000);
    }
  })
},
//多次用到的绘图方法封装
roundedRect(ctx,x,y,width,height,radius){
    if(width <= 0 || height <= 0){
        ctx.arc(x,y,radius,0,Math.PI*2);
        return;
    }
    ctx.moveTo(x+radius,y);
    ctx.arcTo(x+width,y,x+width,y+height,radius);
    ctx.arcTo(x+width,y+height,x,y+height,radius);
    ctx.arcTo(x,y+height,x,y,radius);
    ctx.arcTo(x,y,x+radius,y,radius);
},
drawRoundedRect(ctx,strokeStyle,fillStyle,x,y,width,height,radius){
    ctx.beginPath();
    this.roundedRect(ctx,x,y,width,height,radius);
    ctx.strokeStyle = strokeStyle;
    ctx.fillStyle = fillStyle;
    ctx.stroke();
    ctx.fill();
},