微信小程序使用前置摄像头拍照

 1、拍照页面:

<template>
  <view title="拍照">
    <camera v-if="openCamera" device-position="front" frame-size="large" class="zipai" @error="error"> </camera>
    <cover-image src="/static/image/renzheng_zz.png" class="zhezhao"></cover-image>
    <cover-view class="wenzi fint34">请将正面人脸放在识别框中,进行拍摄</cover-view>
    <cover-image class="paizhao" src="/static/image/renzheng_pz.png" @click="takePhoto"></cover-image>
  </view>
</template>

<script>
  export default {
    data() {
      return {
        openCamera:true
      }
    },
    
    methods: {
      takePhoto() {
        const ctx = wx.createCameraContext()
        ctx.takePhoto({
          quality: 'high',
          success: (res) => {
            let tempFilePath = res.tempImagePath
            uni.navigateTo({
              url:'/pages/renzhengwxtu/renzhengwxtu?src='+tempFilePath
            })
          }
        })
      },
      //用户拒绝授权摄像头
      error(e) {
        this.openCamera=false
        wx.showModal({
          title: '警告',
          content: '若不授权使用摄像头,将无法使用拍照功能!',
          cancelText: '不授权',
          cancelColor: '#1ba9ba',
          confirmText: '授权',
          confirmColor: '#1ba9ba',
          success:(res)=> {
            if (res.confirm) {//允许打开授权页面
              //调起客户端小程序设置界面,返回用户设置的操作结果
              wx.openSetting({
                success:(res)=> {
                  res.authSetting = {
                    "scope.camera": true
                  }
                  this.openCamera=true
                },
              })
            } else if (res.cancel) {//拒绝打开授权页面
              wx.navigateBack({delta:1})
            }
          }
        })
      },
      
    }
  }
</script>

2、预览图片页面:

<template>
  <view title="预览图片">
   <image mode="widthFix" :src="src" class="renlian"></image>
   <view class="btns">
     <text  @click="takePhoto">重拍</text>
     <text  @click="usePhoto">使用照片</text>
   </view>
  </view>
</template>

<script>
  export default {
    data() {
      return {
        src: '',
        timeId:null,
      }
    },
    onLoad(option) {
      this.src=option.src
    },
    onHide() {
      clearTimeout(this.timeId);
      this.timeId=null;
    },
    methods: {
      takePhoto() {
        uni.navigateBack({delta: 1});
      },
      usePhoto() {
        this.$request.uploadFileMinipro(this.src,this.retoRenzheng);
      },
      retoRenzheng(){
        this.timeId=setTimeout(()=>{
          var pages = getCurrentPages();
          var prevPage = pages[pages.length - 3]; //上一个页面
          prevPage.fromTu= true;
          uni.navigateBack({delta: 2});
        },200);
      },
    }
  }
</script>

3、上传图片方法:

// uploadFileMinipro
function uploadFileMinipro(tempFilePath,callback){
  // 1.2 上传头像
  let uin =common.getGlobalUserInfo().id;
  let reurl=common.ip;
  uni.uploadFile({
  	url: reurl,
  	filePath: tempFilePath,
  	name: "file",
  	formData:{uin:uin},
  	success:(res)=>{
      console.log("res=",res);
      // 注意,这里获得是一个string,需要转换一下
      let resData = JSON.parse(res.data);
      if (resData.status == 1) {//<=0:人工返回的错误信息
        setErrorMessage("上传成功");
        if (typeof callback === "function"){
           callback();//刷新当前页面
        }
       
      } else if (resData.status < 1) {
         setErrorMessage(resData.msg)
      } else {
         setErrorMessage()
      }
  	},
    fail:(res)=>{
      console.log("上传失败");
    },
  });
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

佛佛ง

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值