uni-app自定义摄像头拍照添加人物框

简介: uni-app自定义摄像头拍照添加人物框

一、效果

效果种包含相册选择,拍照,切换摄像头。

image.gif

二、知识预备

需要用到uni的以下几个组件:

1、camera

地址:https://uniapp.dcloud.io/component/camera

7ef853bc9c17404db0d24d2ef82f62ef.png

2、cover-image

地址:https://uniapp.dcloud.io/component/cover-view?id=cover-image

f88fa5e0f5e5460991b07835b6e868f0.png

三、思考和方法

思考

我实在新页面调用的摄像头拍照,那我拍了照片后怎么把数据带回原来的页面?

方法

vuex + onShow

四、代码

<template>
  <view class="content" v-if="showHeader"
    style="position: fixed;top: 0;left: 0;z-index: 777;width: 100%;height: 100vh;background-color: #FFFFFF;">
    <camera :binderror="handleCameraError" :device-position="devicePosition" flash="off"
      style="width: 100%; height: 80vh;">
      <cover-image src="https://ucc.alicdn.com/images/user-upload-01/20210126152753150.png"
        style="width: 100%;height: 700rpx;margin-top:100rpx;"></cover-image>
    </camera>
    <view class="btns" style="width: 100%;height: 20vh;background: #3B4144;">
      <image class="item" @tap="chooseImage" src="../../static/write/photo.png"></image>
      <image class="item" @tap="takePhotoByHead" src="../../static/write/camare.png"></image>
      <image class="item" @tap="reverseCamera" src="../../static/write/change.png"></image>
    </view>
    <!-- <view class="error-handler" v-if="!authCamera">
      <button class="nobtn" openType="openSetting">打开相机授权</button>
    </view> -->
  </view>
</template>
<script>
  export default {
    data() {
      return {
        authCamera: false,
        showHeader: true,
        ctxHeader: null,
        devicePosition:'front'
      }
    }, 
    watch:{
      showHeader(val){
        console.log(val)
        return
        var that = this;
        //获取相机权限
        uni.getSetting({
          success(res) {
            console.log('相机权限:', res)
            if (res.authSetting["scope.camera"]) {
              that.authCamera = true
            } else {
              that.authCamera = false
              // uni.showModal({
              //  title: '权限申请',
              //  content: '需要摄像头权限,以拍摄照片。',
              //  success: (btn_res) => {
              //    if (btn_res.confirm) {
              //      uni.authorize({
              //        scope: 'scope.camera',
              //        success() {
              //          that.authCamera = true
              //        }
              //      })
              //    } else if (btn_res.cancel) {
              //    }
              //  }
              // });
            }
          }
        })
      }
    },
    onShow() {
      var that = this;
      //获取相机权限
      uni.getSetting({
        success(res) {
          console.log('相机权限:', res)
          if (res.authSetting["scope.camera"]) {
            that.authCamera = true
          } else {
            that.authCamera = false
            // uni.showModal({
            //  title: '权限申请',
            //  content: '需要摄像头权限,以拍摄照片。',
            //  success: (btn_res) => {
            //    if (btn_res.confirm) {
            //      uni.authorize({
            //        scope: 'scope.camera',
            //        success() {
            //          that.authCamera = true
            //        }
            //      })
            //    } else if (btn_res.cancel) {
            //    }
            //  }
            // });
          }
        }
      })
    },
    onLoad() {
      // console.log(window.innerHeight)
      // if (uni.createCameraContext) {
      //  setTimeout(() => {
      //    this.cameraContext = uni.createCameraContext();
      //  }, 200)
      // } else {
      //  // 如果希望用户在最新版本的客户端上体验您的小程序,可以这样子提示
      //  uni.showModal({
      //    title: '提示',
      //    content: '当前微信版本过低,无法使用该功能,请升级到最新微信版本后重试。'
      //  })
      // }
    },
    methods: {
      chooseImage(){
        uni.chooseImage({
            count: 1, //默认9
            sizeType: ['original', 'compressed'], //可以指定是原图还是压缩图,默认二者都有
            sourceType: ['album'], //从相册选择
            success: (res)=> {
            this.newPath = res.tempFilePaths[0]
            console.log(this.newPath)
            this.$store.commit('set_photo', this.newPath)
            uni.navigateBack({
                delta: 1
            });
            }
        });
      },
      //拍摄头像
      takePhotoByHead() {
        this.showHeader = true //开启拍照
        this.ctxHeader = uni.createCameraContext();
        this.ctxHeader.takePhoto({
          quality: 'high',
          success: (res) => {
            console.log(res)
            uni.compressImage({
              src: res.tempImagePath,
              quality: 90, //压缩比例
              success: ress => {
                this.newPath = ress.tempFilePath; //图片
                console.log(this.newPath)
                this.$store.commit('set_photo', this.newPath)
                uni.navigateBack({
                    delta: 1
                });
              }
            })
          }
        });
      },
      handleCameraError() {
        uni.showToast({
          title: '用户拒绝使用摄像头',
          icon: 'none'
        })
      },
      reverseCamera() {
        this.devicePosition = (("back" === this.devicePosition) ? "front" : "back")
      },
    }
  }
</script>
<style lang="scss" scoped>
  .content {
    display: flex;
    flex-direction: column;
    // align-items: center;
    justify-content: center;
    background: #fff;
    box-sizing: border-box;
    height: 100%;
    width: 100vw;
    .btns {
      display: flex;
      justify-content: space-around;
      align-items: center;
      .item {
        width: 100rpx;
        height: 100rpx;
      }
    }
  }
</style>

以上为自定义拍照部分代码。



目录
相关文章
|
XML 搜索推荐 Java
Android App开发之自定义图形中位图与图形互转、剪裁图形内部区域、给图形添加部件的讲解及实战(附源码 简单易懂)
Android App开发之自定义图形中位图与图形互转、剪裁图形内部区域、给图形添加部件的讲解及实战(附源码 简单易懂)
245 0
|
11月前
|
人工智能 JSON 小程序
【一步步开发AI运动APP】七、自定义姿态动作识别检测——之规则配置检测
本文介绍了如何通过【一步步开发AI运动APP】系列博文,利用自定义姿态识别检测技术开发高性能的AI运动应用。核心内容包括:1) 自定义姿态识别检测,满足人像入镜、动作开始/停止等需求;2) Pose-Calc引擎详解,支持角度匹配、逻辑运算等多种人体分析规则;3) 姿态检测规则编写与执行方法;4) 完整示例展示左右手平举姿态检测。通过这些技术,开发者可轻松实现定制化运动分析功能。
|
10月前
|
Android开发 数据安全/隐私保护 开发者
Android自定义view之模仿登录界面文本输入框(华为云APP)
本文介绍了一款自定义输入框的实现,包含静态效果、hint值浮动动画及功能扩展。通过组合多个控件完成界面布局,使用TranslateAnimation与AlphaAnimation实现hint文字上下浮动效果,支持密码加密解密显示、去除键盘回车空格输入、光标定位等功能。代码基于Android平台,提供完整源码与attrs配置,方便复用与定制。希望对开发者有所帮助。
201 0
|
5月前
|
人工智能 小程序 搜索推荐
【一步步开发AI运动APP】十二、自定义扩展新运动项目2
本文介绍如何基于uni-app运动识别插件实现“双手并举”自定义扩展运动,涵盖动作拆解、姿态检测规则构建及运动分析器代码实现,助力开发者打造个性化AI运动APP。
|
Dart 前端开发
【05】flutter完成注册页面完善样式bug-增加自定义可复用组件widgets-严格规划文件和目录结构-规范入口文件-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
【05】flutter完成注册页面完善样式bug-增加自定义可复用组件widgets-严格规划文件和目录结构-规范入口文件-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
498 75
【05】flutter完成注册页面完善样式bug-增加自定义可复用组件widgets-严格规划文件和目录结构-规范入口文件-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
|
10月前
|
人工智能 小程序 API
【一步步开发AI运动APP】九、自定义姿态动作识别检测——之关键点追踪
本文介绍了【一步步开发AI运动APP】系列中的关键点追踪技术。此前分享的系列博文助力开发者打造了多种AI健身场景的小程序,而新系列将聚焦性能更优的AI运动APP开发。文章重点讲解了“关键点位变化追踪”能力,适用于动态运动(如跳跃)分析,弥补了静态姿态检测的不足。通过`pose-calc`插件,开发者可设置关键点(如鼻子)、追踪方向(X或Y轴)及变化幅度。示例代码展示了如何在`uni-app`框架中使用`createPointTracker`实现关键点追踪,并结合人体识别结果完成动态分析。具体实现可参考文档与Demo示例。
|
9月前
《仿盒马》app开发技术分享-- 自定义标题栏&商品详情初探(9)
上一节我们实现了顶部toolbar的地址选择,会员码展示,首页的静态页面就先告一段落,这节我们来实现商品列表item的点击传值、自定义标题栏。
119 0
|
安全 前端开发 API
【Azure 应用服务】Azure Web App 服务默认支持一些 Weak TLS Ciphers Suite,是否有办法自定义修改呢?
【Azure 应用服务】Azure Web App 服务默认支持一些 Weak TLS Ciphers Suite,是否有办法自定义修改呢?
272 4
|
Dart 前端开发 容器
【07】flutter完成主页-完成底部菜单栏并且做自定义组件-完整短视频仿抖音上下滑动页面-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
【07】flutter完成主页-完成底部菜单栏并且做自定义组件-完整短视频仿抖音上下滑动页面-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
476 18
【07】flutter完成主页-完成底部菜单栏并且做自定义组件-完整短视频仿抖音上下滑动页面-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
|
Java 应用服务中间件 Windows
【应用服务 App Service】App Service 中部署Java项目,查看Tomcat配置及上传自定义版本
【应用服务 App Service】App Service 中部署Java项目,查看Tomcat配置及上传自定义版本
201 0

热门文章

最新文章