侯体宗的博客
  • 首页
  • Hyperf版
  • beego仿版
  • 人生(杂谈)
  • 技术
  • 关于我
  • 更多分类
    • 文件下载
    • 文字修仙
    • 群聊
    • 九宫格抽奖
    • 拼图
    • 消消乐
    • 相册

微信小程序实现拍照画布指定区域生成图片

微信(小程序)  /  管理员 发布于 3年前   923

最近写识别行驶证功能,点击拍照把指定区域截取,生成图片功能。

系统相机。该组件是原生组件,使用时请注意相关限制。 扫码二维码功能,需升级微信客户端至6.7.3。

微信小程序Camera相机地址

我们看下效果:

1、首先生成一个CanvasContext:

/** * 生命周期函数--监听页面加载 */ onLoad: function(options) { requireJs.adaptionIphoneX(this);  this.ctx = wx.createCameraContext()  },

2、相机的 wxml样式

        中华人民共和国机动车行驶证  (行驶证主页)  请对准左下角发证机关印章              {{skipphotoStatus==1?"跳过":""}}            

3、相机的 wxss样式

.camerabgImage-view{ height: 100%; width: 100%; position:absolute;}.bgImage{ width: 100%; height: 100%; position: absolute;} .cameratop-view1{ margin-top: 174rpx;}.cameratop-view2{ margin-top: 220rpx;}.cameratop-view1, .cameratop-view2{ width: 100%; display: flex; justify-content: center; position: absolute;  font-family: PingFangSC-Medium; font-size: 36rpx; color: #FFFFFF; letter-spacing: 0; text-align: center;} .cameracenter-view{ height: 44rpx; width: 100%; position: absolute;  font-family: PingFangSC-Medium; font-size: 32rpx; color: #FFFFFF; letter-spacing: 0; text-align: center;} /* 底部 */.camerabotton-view{ height: 200rpx; width: 100%; position:absolute;  display: flex; justify-content: space-around; align-items: center;}.cancelphoto{ width: 50rpx; height: 50rpx;}.takephoto{ width: 132rpx; height: 132rpx;}.skipphoto{ font-family: PingFangSC-Regular; font-size: 32rpx; color: #FFFFFF; letter-spacing: 0; text-align: center;}

4、js 中访问原生组件 camera  主要针对相机权限处理

微信小程序权限地址

onShow: function() { var that = this wx.authorize({  scope: 'scope.camera',  success: function (res) {  that.setData({   isShowCamera: true,  })  },  fail: function (res) {  console.log("" + res);  wx.showModal({   title: '请求授权您的摄像头',   content: '如需正常使用此小程序功能,请您按确定并在设置页面授权用户信息',   confirmText: '确定',   success: res => {   if (res.confirm) {    wx.openSetting({    success: function (res) {     console.log('成功');     console.log(res);     if (res.authSetting['scope.camera']) { //设置允许获取摄像头     console.log('设置允许获取摄像头')     wx.showToast({      title: '授权成功',      icon: 'success',      duration: 1000     })     that.setData({      isShowCamera: true,     })      } else { //不允许     wx.showToast({      title: '授权失败',      icon: 'none',      duration: 1000     })     wx.redirectTo({      url: 'addCarInfo/addCarInfo',     })     }    }    })   } else { //取消    wx.showToast({    title: '授权失败',    icon: 'none',    duration: 1000    })    wx.redirectTo({    url: 'addCarInfo/addCarInfo',    })   }   }  })   } }) },

5、页面初始化数据

/** * 页面的初始数据 */ data: { isShowCamera: false, width: 10, height: 10, src: "", image: "", skipphotoStatus: "0",// 1跳过 0没有跳过 isShowImage: false },

 6、点击拍照 设置照片, 返回拍照图片

/** * 拍照 */ takePhotoAction: function() { var that = this that.ctx.takePhoto({  quality: 'high', //高质量  success: (res) => {  this.loadTempImagePath(res.tempImagePath);  }, }) },

 7、针对原图片截取尺寸 与 截取后的图片

 loadTempImagePath: function(options) { var that = this that.path = options wx.getSystemInfo({  success: function(res) {   // 矩形的位置  var image_x = 15;  var image_y = 150;  var image_width = that.data.width - 2 * 15;  var image_height = 238;   wx.getImageInfo({   src: that.path,   success: function(res) {   that.setData({    isShowImage: true,   })   that.canvas = wx.createCanvasContext("image-canvas", that)   //过渡页面中,图片的路径坐标和大小   that.canvas.drawImage(that.path, 0, 0, that.data.width, that.data.height)   wx.showLoading({    title: '数据处理中...',    icon: 'loading',    duration: 10000   })   // 这里有一些很神奇的操作,总结就是MD拍出来的照片规格居然不是统一的过渡页面中,对裁剪框的设定   that.canvas.setStrokeStyle('black')   that.canvas.strokeRect(image_x, image_y, image_width, image_height)   that.canvas.draw()   setTimeout(function() {    wx.canvasToTempFilePath({ //裁剪对参数    canvasId: "image-canvas",    x: image_x, //画布x轴起点    y: image_y, //画布y轴起点    width: image_width, //画布宽度    height: image_height, //画布高度    destWidth: image_width, //输出图片宽度    destHeight: image_height, //输出图片高度    success: function(res) {     that.setData({     image: res.tempFilePath,     })     //清除画布上在该矩形区域内的内容。     // that.canvas.clearRect(0, 0, that.data.width, that.data.height)     // that.canvas.drawImage(res.tempFilePath, image_x, image_y, image_width, image_height)     // that.canvas.draw()     wx.hideLoading()      console.log(res.tempFilePath);     //在此可进行网络请求     PublicJS.drivinglicenseUpload(res.tempFilePath, that.uploadFile);    },    fail: function(e) {     wx.hideLoading()     wx.showToast({     title: '出错啦...',     icon: 'loading'     })     if (this.data.skipphotoStatus == 1) {     wx.redirectTo({      url: 'addCarInfo/addCarInfo',     })     } else {     wx.navigateBack({      delta: 1     });     }    }    });   }, 1000);   }  })  } }) }, // 接口返回结果 uploadFile: function(data) {}

 微信小程序Canvas画布地址

1.canvas组件是由客户端创建的原生组件,它的层级是最高的。

2.请勿在scroll-view中使用canvas组件。

3.css动画对canvas组件无效。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。

您可能感兴趣的文章:

  • 微信小程序实现弹出菜单动画
  • 微信小程序实现圆形进度条动画
  • 微信小程序实现下拉刷新动画
  • 微信小程序实现录音时的麦克风动画效果实例
  • 微信小程序使用canvas的画图操作示例
  • 微信小程序CSS3动画下拉菜单效果
  • 小程序和web画三角形实现解析


  • 上一条:
    百度小程序之间的页面通信过程详解
    下一条:
    微信小程序用户授权、位置授权及获取微信绑定手机号
  • 昵称:

    邮箱:

    0条评论 (评论内容有缓存机制,请悉知!)
    最新最热
    • 分类目录
    • 人生(杂谈)
    • 技术
    • linux
    • Java
    • php
    • 框架(架构)
    • 前端
    • ThinkPHP
    • 数据库
    • 微信(小程序)
    • Laravel
    • Redis
    • Docker
    • Go
    • swoole
    • Windows
    • Python
    • 苹果(mac/ios)
    • 相关文章
    • 小程序开发之跳转微信直播示例api(0个评论)
    • 在uni_app中开发小程序之常用功能示例代码汇总(0个评论)
    • 小程序开发之多端框架:taro(0个评论)
    • 微信小程序前端使用七牛云官方SDK上传七牛云代码示例(0个评论)
    • 百度小程序审核未通过,真机审核存在点击返回键退出小程序...解决方式之一tabBar(0个评论)
    • 近期文章
    • mysql5.7中实现分区表及分区where in查询示例及分区分表对比浅析(0个评论)
    • nginx + vue配置实现同域名下不同路径访问不同项目(0个评论)
    • 在laravel框架中的5个HTTP客户端技巧分享(0个评论)
    • 在go语言中使用FFmpeg库实现PCM音频文件编码为mp3格式文件流程步骤(0个评论)
    • gopacket免安装Pcap实现驱动层流量抓包流程步骤(0个评论)
    • 在laravel项目中实现密码强度验证功能推荐扩展包:password-strength(0个评论)
    • 在go语言中用filepath.Match()函数以通配符模式匹配字符串示例(0个评论)
    • Laravel Response Classes 响应类使用优化浅析(0个评论)
    • mysql中sql_mode的各模式浅析(0个评论)
    • 百度文心一言今天发布,个人第一批内测体验记录,不好别打我(0个评论)
    • 近期评论
    • 博主 在

      2023年国务院办公厅春节放假通知:1月21日起休7天中评论 @ xiaoB 你只管努力,剩下的叫给天意;天若有情天亦老,..
    • xiaoB 在

      2023年国务院办公厅春节放假通知:1月21日起休7天中评论 会不会春节放假后又阳一次?..
    • BUG4 在

      你翻墙过吗?国内使用vpn翻墙可能会被网警抓,你需了解的事中评论 不是吧?..
    • 博主 在

      go语言+beego框架中获取get,post请求的所有参数中评论 @ t1  直接在router.go文件中配就ok..
    • Jade 在

      如何在MySQL查询中获得当月记录中评论 Dear zongscan.com team, We can skyroc..
    • 2017-10
    • 2018-01
    • 2020-03
    • 2021-06
    • 2021-10
    • 2022-03
    • 2023-02
    Top

    Copyright·© 2019 侯体宗版权所有· 粤ICP备20027696号 PHP交流群

    侯体宗的博客