微信小程序电子签名实现并识别文字

该功能主要用到了canvas画布实现,先说明本地测试会卡顿,但是部署到测式服务器或生产环境后,就很流畅了,这一点无须担心。下面贴一些关键代码,变量啥的我没删,项目完成半年多了,在此记录一下, 我的签名是白底黑字,可以修改canvas属性自定义,导出图片方法里注释掉的一堆代码,是使用百度的智能识别签名图片上的文字,不过测试后识别率很低,评估之后取消了此需求,没有删除(以防万一,二次开发提需求。。。)有的可以识别出来,不过不尽人意啊,如果你有次功能,需要在百度只能识别上面注册,第一个请求url,需要包含grant_type,client_id和client_secret,请求成功后返回一个token,第二个接口url拼接access_token等于返回的token,教程里都有

wxml

<!-- 弹窗里放画布 -->
		<view wx:if='{{showSignature}}' class="drawContainer">
				<view style="display:flex;justify-content: space-between">
				  <button style="margin-top:10rpx" type="default" bindtap="closeCanvas">关闭</button>
					<button style="margin-top:10rpx" type="default" bindtap="cleardraw">清空</button>
					<button style="margin-top:10rpx" type="default" bindtap="getimg">确定</button>
				</view>
				<canvas class="canvas" id="canvas" canvas-id="canvas" disable-scroll="true" bindtouchstart="canvasStart" bindtouchmove="canvasMove" bindtouchend="canvasEnd" touchcancel="canvasEnd" binderror="canvasIdErrorCallback"></canvas>
		</view>

js

onLoad: function (options) {

    context = wx.createCanvasContext('canvas');
    context.beginPath()
    context.setFillStyle('white');
    context.fillRect(0, 0, 800 , 457 )
    context.setLineWidth(4);
    context.setLineCap('round');
    context.setLineJoin('round');
  },



//开始
  canvasStart: function (event) {
    isButtonDown = true;
    arrz.push(0);
    arrx.push(event.changedTouches[0].x);
    arry.push(event.changedTouches[0].y);
    //context.moveTo(event.changedTouches[0].x, event.changedTouches[0].y);

  },
  cleardraw: function () {
    //清除画布
    arrx = [];
    arry = [];
    arrz = [];
    context.clearRect(0, 0, canvasw, canvash);
    context.draw(true);
  },
  closeCanvas: function () {
    this.cleardraw();
    this.setData({
      showSignature : false
    })
  },


//生成图片
      setTimeout(function(){
        wx.canvasToTempFilePath({
          canvasId: 'canvas',
          success: function (res) {
            //  var imgUrl = "";
            //  var tempFilePath = res.tempFilePath;
            //  wx.getFileSystemManager().readFile({
            //    filePath:tempFilePath,
            //    encoding:'base64',
            //    success(res){
            //       imgUrl = res.data;
            //       wx.request({
            //         url: '',
            //         method:'post',
            //         header:{
            //           "sessionKey": app.globalData.sessionKey
            //         },
            //         success(res1){
            //           var token = res1.data.access_token;
            //           wx.request({
            //             url: '',
            //             method:'post',
            //             dataType:'json',
            //             header:{
            //               "sessionKey": app.globalData.sessionKey,
            //               "Content-Type":	'application/x-www-form-urlencoded'
            //             },
            //             data:{
            //              "image":imgUrl
            //             },
            //             success(res2){
            //               console.log(res2)
            //             }
            //           })
            //         }
            //       })
            //    }
            //  })
             that.setData({
              drawImg:res.tempFilePath,
              showSignature:false
             })
          }
        })
      })

//过程
  canvasMove: function (event) {
    if (isButtonDown) {
      arrz.push(1);
      arrx.push(event.changedTouches[0].x);
      arry.push(event.changedTouches[0].y);
    };

    for (var i = 0; i < arrx.length; i++) {
      if (arrz[i] == 0) {
        context.moveTo(arrx[i], arry[i])
      } else {
        context.lineTo(arrx[i], arry[i])
      };

    };
    context.clearRect(0, 0, canvasw, canvash);
    // context.setStrokeStyle('#000000');
    context.setFillStyle('white');
    context.fillRect(0, 0, 800 , 457 )
    context.setLineWidth(4);
    context.setLineCap('round');
    context.setLineJoin('round');
    context.stroke();

    context.draw(false);
  },
  canvasEnd: function (event) {
    isButtonDown = false;
  },

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值