微信小程序canvas画图、文字、字体换行,以及保存图片到本地的坑

页面 : 

<canvas style="width: 376px; height: 530px; background-color:#ddd;position:absolute;left:-1000px;" canvas-id="myCanvas"></canvas>  

步骤 1:网络图片,canvas画图必须先把图片下载到本地才可以使用

var ctx = wx.createCanvasContext('myCanvas');
wx.showLoading({
   title:'图片下载中'
})
wx.downloadFile({
    url:this.drawbg,
    success:(res)=>{
       var saveurl = res.tempFilePath;
       ctx.drawImage(saveurl, 0, 0, 376, 580);
       ctx.drawImage(this.code, 290, 423, 55, 55);
       //字体
       ctx.font = 'normal 11px sans-serif';
       ctx.setFontSize(16);
       ctx.setFillStyle('#fff');
       ctx.fillText(this.drawprecent + ',评测等级为', 25, 68);
       //字体换行
       this.drawText(ctx, this.drawcontent, 30, 350, 200, 307);
       ctx.draw(false,function(){                                
         wx.canvasToTempFilePath({ //生成图片
             x: 0,
             y: 0,
             quality:1,
             canvasId: 'myCanvas',
             success:  (res)=> {
                  wx.hideLoading();
                  var drawurl = res.tempFilePath;
                  wx.saveImageToPhotosAlbum({  //保存生成的图片到手机相册里
                     filePath: drawurl,
                        success(res) {
                           wx.showToast({
                               'title':'保存相册成功'
                           })
                        }
                  })
              }
          })
      });

字体换行的方法

drawText(ctx, str, leftWidth, initHeight, titleHeight, canvasWidth) {        
            var lineWidth = 0;        
            var lastSubStrIndex = 0; //每次开始截取的字符串的索引 
            for (let i = 0; i < str.length; i++) { 
                lineWidth += ctx.measureText(str[i]).width;            
                if (lineWidth > canvasWidth) {                
                    ctx.fillText(str.substring(lastSubStrIndex, i), leftWidth, initHeight); //绘制截取部分                
                    initHeight += 25; //16为字体的高度                
                    lineWidth = 0;                
                    lastSubStrIndex = i;                
                    titleHeight += 30;            
                }            
                if (i == str.length - 1) { //绘制剩余部分                
                ctx.fillText(str.substring(lastSubStrIndex, i + 1), leftWidth, initHeight);            
                }        
            }        // 标题border-bottom 线距顶部距离        
            titleHeight = titleHeight + 10;        
            return titleHeight    
        },

效果图:

  • 6
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值