小程序canvas图片与文字生成新图片
发布于 5 年前 作者 caoguiying 3005 次浏览 来自 分享

小程序canvas图片文字合成技术,虽然不是什么牛逼的技术。但是我相信还是有很多的项目是需要这项技术,所以我把他写出来并且开源出来,也没有其他的什么目地。就是想让那些可能正在开发的小哥哥小姐姐们少些弯路罢了,仅提供些参考,哈

1.WXML部分

<view class="shareImgs"><canvas canvas-id="myCanvas" style="width:350px;height:568px;background-color:#fff;"></canvas></view>
<view class="saveImgBtn" bindtap="saveCanvas">生成图片并保存相册</view>

2.WXSS部分

.shareImgs{width:350px;margin:20rpx auto;background-color:#fff;}
.saveImgBtn{color:#fff;background-color:#9933CC;height:90rpx;line-height:90rpx;font-size:32rpx;margin:40rpx;text-align:center;border-radius:8rpx;}

3.JS部分

canvasImgFun(){ //可用调用或在onLoad中直接调用
    let _this = this
    const ctx = wx.createCanvasContext('myCanvas')
    ctx.rect(0, 0, 350, 568)
    ctx.setFillStyle('#fff')
    ctx.fill()
    ctx.clip();//剪切
    ctx.drawImage('小程序二维码图片地址', 105, 320, 140, 140,0,0)
    ctx.draw()
    ctx.beginPath()
    ctx.font = 'normal bold 50px Monospaced Number,Chinese Quote,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,PingFang SC,Hiragino Sans GB,Microsoft YaHei,Helvetica Neue,Helvetica,Arial,sans-serif'
    ctx.setFillStyle('#9933CC')
    ctx.setFontSize(50)
    ctx.fillText('壹柒图图', 75, 100)
    ctx.setFillStyle('#888')
    ctx.setFontSize(14)
    ctx.fillText('长按识别小程序码,进入壹柒图图', 70, 490)
    ctx.font = 'normal bold 38px Monospaced Number,Chinese Quote,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,PingFang SC,Hiragino Sans GB,Microsoft YaHei,Helvetica Neue,Helvetica,Arial,sans-serif'
    ctx.setFillStyle('#515a6e')
    ctx.setFontSize(31)
    ctx.fillText('有头像工具装逼技巧', 33, 148)
    ctx.draw(true);
  },
  saveCanvas(){
    let _this=this
    wx.canvasToTempFilePath({
      x: 0,
      y: 0,
      width: 350,
      height: 568,
      canvasId: 'myCanvas',
      success:function(res) {
        console.log(res,'ssss')
        let img = res.tempFilePath
        wx.saveImageToPhotosAlbum({
          filePath: img,
          success(json) {
            wx.showToast({
              title:'成功保存',
              icon: 'none',
              duration: 2000
            });
            _this.cancelcanvas()
            console.log(json, 'kk')
          },
          fail() {
            wx.showToast({
              title: '保存失败',
              icon: 'none',
              duration: 2000
            });
            _this.cancelcanvas()
          }
        })
      }
    })
  },
回到顶部