戒腥的猫 發表於 2024-8-30 15:17:00

uni-app之camera组件-人脸拍摄

<p>小程序录制视频;10-30秒;需要拍摄人脸,大声朗读数字(123456)这种。</p>
<h2 class="md-end-block md-heading"><span class="md-plain">1.camera组件</span></h2>
<p class="md-end-block md-p"><span class="md-plain">camera页面内嵌的区域相机组件。注意这不是点击后全屏打开的相机</span></p>
<p class="md-end-block md-p md-focus"><span class="md-plain">camera只支持小程序使用;<span class="md-meta-i-cmd-link"><span class="md-plain">官网链接</span></span></span></p>
<p class="md-end-block md-p md-focus"><span class="md-plain"><img src="https://img2024.cnblogs.com/blog/2237618/202408/2237618-20240830150416743-1945450748.png" alt=""></span></p>
<h3 class="md-end-block md-heading md-focus"><span class="md-plain md-expand">1.2 效果图</span></h3>
<p><img src="https://img2024.cnblogs.com/blog/2237618/202408/2237618-20240830151336818-874263568.png" alt=""></p>
<p>&nbsp;</p>
<h3 class="md-end-block md-heading md-focus"><span class="md-plain">1.3 页面布局</span></h3>
<p class="md-end-block md-p"><span class="md-plain">camera 设置宽100%,高度通过uni.getSystemInfo获取,全屏展示。在通过定位把提示文字等信息放上去;</span></p>
<p class="md-end-block md-p"><span class="md-plain">录制完毕,遮罩提示,完成录制,确认返回;</span></p>
<div class="cnblogs_code"><img src="https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif" id="code_img_closed_fe469369-bed6-4e3a-9ba8-f33ec6281cfd" class="code_img_closed"><img src="https://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif" id="code_img_opened_fe469369-bed6-4e3a-9ba8-f33ec6281cfd" class="code_img_opened" style="display: none">
<div id="cnblogs_code_open_fe469369-bed6-4e3a-9ba8-f33ec6281cfd" class="cnblogs_code_hide">
<pre><span style="color: rgba(0, 0, 255, 1)">&lt;</span><span style="color: rgba(128, 0, 0, 1)">template</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span>
    <span style="color: rgba(0, 0, 255, 1)">&lt;</span><span style="color: rgba(128, 0, 0, 1)">view </span><span style="color: rgba(255, 0, 0, 1)">class</span><span style="color: rgba(0, 0, 255, 1)">="camera-position"</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span>
      <span style="color: rgba(0, 0, 255, 1)">&lt;</span><span style="color: rgba(128, 0, 0, 1)">camera </span><span style="color: rgba(255, 0, 0, 1)">device-position</span><span style="color: rgba(0, 0, 255, 1)">="front"</span><span style="color: rgba(255, 0, 0, 1)"> flash</span><span style="color: rgba(0, 0, 255, 1)">="auto"</span><span style="color: rgba(255, 0, 0, 1)"> @error</span><span style="color: rgba(0, 0, 255, 1)">="onCameraError"</span><span style="color: rgba(255, 0, 0, 1)">
            :style</span><span style="color: rgba(0, 0, 255, 1)">="'width: 100%; height: '+ screenHeight +'px;'"</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span>
            <span style="color: rgba(0, 128, 0, 1)">&lt;!--</span><span style="color: rgba(0, 128, 0, 1)"> 人脸轮廓-图片 </span><span style="color: rgba(0, 128, 0, 1)">--&gt;</span>
            <span style="color: rgba(0, 0, 255, 1)">&lt;</span><span style="color: rgba(128, 0, 0, 1)">image </span><span style="color: rgba(255, 0, 0, 1)">src</span><span style="color: rgba(0, 0, 255, 1)">="../../static/face/face-avater.png"</span><span style="color: rgba(255, 0, 0, 1)"> style</span><span style="color: rgba(0, 0, 255, 1)">="width: 100%; height: 55vh; margin:22vh 0 0 0;"</span><span style="color: rgba(255, 0, 0, 1)">
                v-if</span><span style="color: rgba(0, 0, 255, 1)">="!achieveShow"</span><span style="color: rgba(0, 0, 255, 1)">&gt;&lt;/</span><span style="color: rgba(128, 0, 0, 1)">image</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span>
      <span style="color: rgba(0, 0, 255, 1)">&lt;/</span><span style="color: rgba(128, 0, 0, 1)">camera</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span>

      <span style="color: rgba(0, 128, 0, 1)">&lt;!--</span><span style="color: rgba(0, 128, 0, 1)"> 顶部提示信息 </span><span style="color: rgba(0, 128, 0, 1)">--&gt;</span>
      <span style="color: rgba(0, 0, 255, 1)">&lt;</span><span style="color: rgba(128, 0, 0, 1)">view </span><span style="color: rgba(255, 0, 0, 1)">class</span><span style="color: rgba(0, 0, 255, 1)">="camera-top text-center"</span><span style="color: rgba(255, 0, 0, 1)"> v-show</span><span style="color: rgba(0, 0, 255, 1)">="!achieveShow"</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span>
            <span style="color: rgba(0, 0, 255, 1)">&lt;</span><span style="color: rgba(128, 0, 0, 1)">view </span><span style="color: rgba(255, 0, 0, 1)">class</span><span style="color: rgba(0, 0, 255, 1)">="text-lg text-red"</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span><span style="color: rgba(0, 0, 0, 1)">
                请面向屏幕
            </span><span style="color: rgba(0, 0, 255, 1)">&lt;/</span><span style="color: rgba(128, 0, 0, 1)">view</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span>
            <span style="color: rgba(0, 0, 255, 1)">&lt;</span><span style="color: rgba(128, 0, 0, 1)">view </span><span style="color: rgba(255, 0, 0, 1)">class</span><span style="color: rgba(0, 0, 255, 1)">="text-xl text-white margin-tb-xs"</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span>
                <span style="color: rgba(0, 0, 255, 1)">&lt;</span><span style="color: rgba(128, 0, 0, 1)">text </span><span style="color: rgba(255, 0, 0, 1)">class</span><span style="color: rgba(0, 0, 255, 1)">="text-lg"</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span>用普通话大声读<span style="color: rgba(0, 0, 255, 1)">&lt;/</span><span style="color: rgba(128, 0, 0, 1)">text</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span>
                <span style="color: rgba(0, 0, 255, 1)">&lt;</span><span style="color: rgba(128, 0, 0, 1)">text </span><span style="color: rgba(255, 0, 0, 1)">class</span><span style="color: rgba(0, 0, 255, 1)">="text-red text-bold margin-left-xs"</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span>123456<span style="color: rgba(0, 0, 255, 1)">&lt;/</span><span style="color: rgba(128, 0, 0, 1)">text</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span>
            <span style="color: rgba(0, 0, 255, 1)">&lt;/</span><span style="color: rgba(128, 0, 0, 1)">view</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span>
            <span style="color: rgba(0, 0, 255, 1)">&lt;</span><span style="color: rgba(128, 0, 0, 1)">view </span><span style="color: rgba(255, 0, 0, 1)">class</span><span style="color: rgba(0, 0, 255, 1)">="text-xxl text-red"</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span>
                <span style="color: rgba(0, 0, 255, 1)">&lt;</span><span style="color: rgba(128, 0, 0, 1)">text </span><span style="color: rgba(255, 0, 0, 1)">class</span><span style="color: rgba(0, 0, 255, 1)">="text-df text-white"</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span>倒计时<span style="color: rgba(0, 0, 255, 1)">&lt;/</span><span style="color: rgba(128, 0, 0, 1)">text</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span>
                <span style="color: rgba(0, 0, 255, 1)">&lt;</span><span style="color: rgba(128, 0, 0, 1)">text </span><span style="color: rgba(255, 0, 0, 1)">class</span><span style="color: rgba(0, 0, 255, 1)">="text-red text-bold margin-lr-xs"</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span>{{totalSeconds}}<span style="color: rgba(0, 0, 255, 1)">&lt;/</span><span style="color: rgba(128, 0, 0, 1)">text</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span>
                <span style="color: rgba(0, 0, 255, 1)">&lt;</span><span style="color: rgba(128, 0, 0, 1)">text </span><span style="color: rgba(255, 0, 0, 1)">class</span><span style="color: rgba(0, 0, 255, 1)">="text-df text-white"</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span>S<span style="color: rgba(0, 0, 255, 1)">&lt;/</span><span style="color: rgba(128, 0, 0, 1)">text</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span>
            <span style="color: rgba(0, 0, 255, 1)">&lt;/</span><span style="color: rgba(128, 0, 0, 1)">view</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span>
      <span style="color: rgba(0, 0, 255, 1)">&lt;/</span><span style="color: rgba(128, 0, 0, 1)">view</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span>

      <span style="color: rgba(0, 128, 0, 1)">&lt;!--</span><span style="color: rgba(0, 128, 0, 1)"> 完成拍摄 </span><span style="color: rgba(0, 128, 0, 1)">--&gt;</span>
      <span style="color: rgba(0, 0, 255, 1)">&lt;</span><span style="color: rgba(128, 0, 0, 1)">view </span><span style="color: rgba(255, 0, 0, 1)">class</span><span style="color: rgba(0, 0, 255, 1)">="achieve-shade"</span><span style="color: rgba(255, 0, 0, 1)"> :style</span><span style="color: rgba(0, 0, 255, 1)">="'width: 100%; height: '+ screenHeight +'px;'"</span><span style="color: rgba(255, 0, 0, 1)"> v-if</span><span style="color: rgba(0, 0, 255, 1)">="achieveShow"</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span>
            <span style="color: rgba(0, 0, 255, 1)">&lt;</span><span style="color: rgba(128, 0, 0, 1)">view </span><span style="color: rgba(255, 0, 0, 1)">class</span><span style="color: rgba(0, 0, 255, 1)">=""</span><span style="color: rgba(255, 0, 0, 1)"> style</span><span style="color: rgba(0, 0, 255, 1)">="font-size: 120rpx;color: #1977FF;"</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span>
                <span style="color: rgba(0, 0, 255, 1)">&lt;</span><span style="color: rgba(128, 0, 0, 1)">text </span><span style="color: rgba(255, 0, 0, 1)">class</span><span style="color: rgba(0, 0, 255, 1)">="cuIcon-roundcheck"</span><span style="color: rgba(0, 0, 255, 1)">&gt;&lt;/</span><span style="color: rgba(128, 0, 0, 1)">text</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span>
            <span style="color: rgba(0, 0, 255, 1)">&lt;/</span><span style="color: rgba(128, 0, 0, 1)">view</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span>
            <span style="color: rgba(0, 0, 255, 1)">&lt;</span><span style="color: rgba(128, 0, 0, 1)">view </span><span style="color: rgba(255, 0, 0, 1)">class</span><span style="color: rgba(0, 0, 255, 1)">="text-xl text-white margin-tb-sm"</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span><span style="color: rgba(0, 0, 0, 1)">
                已完成人脸识别
            </span><span style="color: rgba(0, 0, 255, 1)">&lt;/</span><span style="color: rgba(128, 0, 0, 1)">view</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span>
            <span style="color: rgba(0, 0, 255, 1)">&lt;</span><span style="color: rgba(128, 0, 0, 1)">button </span><span style="color: rgba(255, 0, 0, 1)">class</span><span style="color: rgba(0, 0, 255, 1)">="cu-btn line-blue round lg"</span><span style="color: rgba(255, 0, 0, 1)"> @click</span><span style="color: rgba(0, 0, 255, 1)">="confirmBut"</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span>确定<span style="color: rgba(0, 0, 255, 1)">&lt;/</span><span style="color: rgba(128, 0, 0, 1)">button</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span>
      <span style="color: rgba(0, 0, 255, 1)">&lt;/</span><span style="color: rgba(128, 0, 0, 1)">view</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span>
    <span style="color: rgba(0, 0, 255, 1)">&lt;/</span><span style="color: rgba(128, 0, 0, 1)">view</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span>
<span style="color: rgba(0, 0, 255, 1)">&lt;/</span><span style="color: rgba(128, 0, 0, 1)">template</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span></pre>
</div>
<span class="cnblogs_code_collapse">View</span></div>
<p>注:行内css&nbsp;<code>text-xl text-white margin-tb-xs</code>使用了&nbsp;ColorUI-UniApp&nbsp;插件内容</p>
<p>css样式</p>
<div class="cnblogs_code"><img src="https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif" id="code_img_closed_3314d2e9-c58c-4ca3-8be8-6d116689d5d5" class="code_img_closed"><img src="https://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif" id="code_img_opened_3314d2e9-c58c-4ca3-8be8-6d116689d5d5" class="code_img_opened" style="display: none">
<div id="cnblogs_code_open_3314d2e9-c58c-4ca3-8be8-6d116689d5d5" class="cnblogs_code_hide">
<pre><span style="color: rgba(128, 0, 0, 1)">&lt;style lang="scss" scoped&gt;
    .camera-position </span>{<span style="color: rgba(255, 0, 0, 1)">
      position</span>:<span style="color: rgba(0, 0, 255, 1)"> relative</span>;<span style="color: rgba(255, 0, 0, 1)">

      .camera-top {
            position</span>:<span style="color: rgba(0, 0, 255, 1)"> absolute</span>;<span style="color: rgba(255, 0, 0, 1)">
            left</span>:<span style="color: rgba(0, 0, 255, 1)"> 0</span>;<span style="color: rgba(255, 0, 0, 1)">
            top</span>:<span style="color: rgba(0, 0, 255, 1)"> 50rpx</span>;<span style="color: rgba(255, 0, 0, 1)">
            width</span>:<span style="color: rgba(0, 0, 255, 1)"> 100%</span>;
      }<span style="color: rgba(128, 0, 0, 1)">

      .camera-bottom </span>{<span style="color: rgba(255, 0, 0, 1)">
            position</span>:<span style="color: rgba(0, 0, 255, 1)"> absolute</span>;<span style="color: rgba(255, 0, 0, 1)">
            left</span>:<span style="color: rgba(0, 0, 255, 1)"> 0</span>;<span style="color: rgba(255, 0, 0, 1)">
            bottom</span>:<span style="color: rgba(0, 0, 255, 1)"> 0</span>;<span style="color: rgba(255, 0, 0, 1)">
            width</span>:<span style="color: rgba(0, 0, 255, 1)"> 100%</span>;
      }<span style="color: rgba(128, 0, 0, 1)">

      .achieve-shade </span>{<span style="color: rgba(255, 0, 0, 1)">
            position</span>:<span style="color: rgba(0, 0, 255, 1)"> absolute</span>;<span style="color: rgba(255, 0, 0, 1)">
            left</span>:<span style="color: rgba(0, 0, 255, 1)"> 0</span>;<span style="color: rgba(255, 0, 0, 1)">
            top</span>:<span style="color: rgba(0, 0, 255, 1)"> 0</span>;<span style="color: rgba(255, 0, 0, 1)">
            background-color</span>:<span style="color: rgba(0, 0, 255, 1)"> rgba(222, 222, 222, 0.9)</span>;<span style="color: rgba(255, 0, 0, 1)">
            display</span>:<span style="color: rgba(0, 0, 255, 1)"> flex</span>;<span style="color: rgba(255, 0, 0, 1)">
            flex-direction</span>:<span style="color: rgba(0, 0, 255, 1)"> column</span>;<span style="color: rgba(255, 0, 0, 1)">
            align-items</span>:<span style="color: rgba(0, 0, 255, 1)"> center</span>;<span style="color: rgba(255, 0, 0, 1)">
            justify-content</span>:<span style="color: rgba(0, 0, 255, 1)"> center</span>;<span style="color: rgba(255, 0, 0, 1)">

            button {
                width</span>:<span style="color: rgba(0, 0, 255, 1)"> 300rpx</span>;
            }<span style="color: rgba(128, 0, 0, 1)">
      }
    }
&lt;/style&gt;</span></pre>
</div>
<span class="cnblogs_code_collapse">css</span></div>
<p>js代码</p>
<div class="cnblogs_code"><img src="https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif" id="code_img_closed_932a1d5b-87a5-4fff-bbd7-a9aaf0e7563d" class="code_img_closed"><img src="https://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif" id="code_img_opened_932a1d5b-87a5-4fff-bbd7-a9aaf0e7563d" class="code_img_opened" style="display: none">
<div id="cnblogs_code_open_932a1d5b-87a5-4fff-bbd7-a9aaf0e7563d" class="cnblogs_code_hide">
<pre>&lt;script&gt;<span style="color: rgba(0, 0, 0, 1)">
    export </span><span style="color: rgba(0, 0, 255, 1)">default</span><span style="color: rgba(0, 0, 0, 1)"> {
      data() {
            </span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> {
                cameraContext: </span><span style="color: rgba(0, 0, 255, 1)">null</span><span style="color: rgba(0, 0, 0, 1)">,
                </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">计时器</span>
                timer: <span style="color: rgba(0, 0, 255, 1)">null</span><span style="color: rgba(0, 0, 0, 1)">,
                </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">录制时长</span>
                totalSeconds: 10<span style="color: rgba(0, 0, 0, 1)">,
                </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">屏幕高度</span>
                screenHeight: ""<span style="color: rgba(0, 0, 0, 1)">,
                </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">是否显示-完成遮罩</span>
                achieveShow: <span style="color: rgba(0, 0, 255, 1)">false</span><span style="color: rgba(0, 0, 0, 1)">
            }
      },
      onLoad() {
            let that </span>= <span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">
            uni.getSystemInfo({
                success: (res) </span>=&gt;<span style="color: rgba(0, 0, 0, 1)"> {
                  console.log(</span>'屏幕宽度,单位为px:'<span style="color: rgba(0, 0, 0, 1)">, res.windowWidth);
                  console.log(</span>'屏幕高度,单位为px:'<span style="color: rgba(0, 0, 0, 1)">, res.windowHeight);
                  that.screenHeight </span>=<span style="color: rgba(0, 0, 0, 1)"> res.windowHeight;
                },
            });

            setTimeout(() </span>=&gt;<span style="color: rgba(0, 0, 0, 1)"> {
                </span><span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.startShoot()
            }, </span>500<span style="color: rgba(0, 0, 0, 1)">)
      },
      onReady() {
            </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 创建 camera 上下文 CameraContext 对象</span>
            <span style="color: rgba(0, 0, 255, 1)">this</span>.cameraContext =<span style="color: rgba(0, 0, 0, 1)"> uni.createCameraContext()
      },
      methods: {
            </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 开始拍摄</span>
<span style="color: rgba(0, 0, 0, 1)">            startShoot() {
                </span><span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.cameraContext.startRecord({
                  timeoutCallback: () </span>=&gt;<span style="color: rgba(0, 0, 0, 1)"> {
                        console.error(</span>'超出限制时长', <span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.totalSecond);
                  },
                  timeout: </span><span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.totalSeconds,
                  success: (res) </span>=&gt;<span style="color: rgba(0, 0, 0, 1)"> {
                        </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">开启计时器</span>
                        <span style="color: rgba(0, 0, 255, 1)">this</span>.timer = setInterval(() =&gt;<span style="color: rgba(0, 0, 0, 1)"> {
                            </span><span style="color: rgba(0, 0, 255, 1)">this</span>.totalSeconds--<span style="color: rgba(0, 0, 0, 1)">
                        }, </span>1000<span style="color: rgba(0, 0, 0, 1)">)
                        console.log(res, </span>'开始拍摄'<span style="color: rgba(0, 0, 0, 1)">);
                  },
                  fail: (err) </span>=&gt;<span style="color: rgba(0, 0, 0, 1)"> {
                        </span><span style="color: rgba(0, 0, 255, 1)">this</span>.errToast('摄像头启动失败,请重新打开'<span style="color: rgba(0, 0, 0, 1)">)
                  }
                })
            },
            </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 结束拍摄</span>
<span style="color: rgba(0, 0, 0, 1)">            stopShoot() {
                </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 接触 计时器</span>
                <span style="color: rgba(0, 0, 255, 1)">if</span> (<span style="color: rgba(0, 0, 255, 1)">this</span>.timer) clearInterval(<span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.timer)

                </span><span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.cameraContext.stopRecord({
                  compressed: </span><span style="color: rgba(0, 0, 255, 1)">true</span><span style="color: rgba(0, 0, 0, 1)">,
                  success: (res) </span>=&gt;<span style="color: rgba(0, 0, 0, 1)"> {
                        </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">显示遮罩</span>
                        <span style="color: rgba(0, 0, 255, 1)">this</span>.achieveShow = <span style="color: rgba(0, 0, 255, 1)">true</span>
                        <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> TODO 获取数据帧</span>
                        console.log(res, '结束拍摄'<span style="color: rgba(0, 0, 0, 1)">);
                  },
                  fail: (err) </span>=&gt;<span style="color: rgba(0, 0, 0, 1)"> {
                        </span><span style="color: rgba(0, 0, 255, 1)">this</span>.errToast('视频保存失败,请重新录制'<span style="color: rgba(0, 0, 0, 1)">)
                  },
                })
            },
            </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 摄像头错误</span>
<span style="color: rgba(0, 0, 0, 1)">            onCameraError(error) {
                console.error(</span>'摄像头错误: '<span style="color: rgba(0, 0, 0, 1)">, error.detail);
            },
            </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">摄像头-失败操作</span>
<span style="color: rgba(0, 0, 0, 1)">            errToast(e) {
                </span><span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.$operate.toast({
                  title: e
                })
                setTimeout(() </span>=&gt;<span style="color: rgba(0, 0, 0, 1)"> {
                  </span><span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.confirmBut()
                }, </span>500<span style="color: rgba(0, 0, 0, 1)">)
            },
            </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">确定-返回上一页</span>
<span style="color: rgba(0, 0, 0, 1)">            confirmBut() {
                uni.navigateBack()
            },
      },
      watch: {
            </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">监听倒计时 </span>
<span style="color: rgba(0, 0, 0, 1)">            totalSeconds: {
                handler(newVal) {
                  </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> console.log(newVal, '倒计时');</span>
                  <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">倒计时 = 1 的时候结束拍摄 </span>
                  <span style="color: rgba(0, 0, 255, 1)">if</span> (newVal == 1<span style="color: rgba(0, 0, 0, 1)">) {
                        </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">结束拍摄</span>
                        <span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.stopShoot()
                  }
                }
            }
      }
    }
</span>&lt;/script&gt;</pre>
</div>
<span class="cnblogs_code_collapse">js</span></div>
<p class="md-end-block md-p"><span class="md-plain">注:第一次进入页面,有时候摄像头会启动失败,需要重新点击打开;</span></p>
<p class="md-end-block md-p"><span class="md-plain"><span class="md-plain">案例地址:&nbsp;<span class="md-link md-pair-s">https://gitee.com/jielov/uni-app-tabbar</span></span></span></p>
<h2 class="md-end-block md-heading"><span class="md-plain md-expand">2.微信官方api</span></h2>
<p class="md-end-block md-p"><span class="md-pair-s "><strong>微信小程序</strong><span class="md-plain">中需要使用手机<span class="md-pair-s "><strong>拍摄照片以及视频</strong><span class="md-plain">;使用<span class="md-pair-s"><code>wx.chooseMedia</code><span class="md-plain">API来实现;</span></span></span></span></span></span></p>
<p class="md-end-block md-p md-focus"><span class="md-plain">该API用于拍摄或从手机相册中选择图片或视频,官网链接为:<span class="md-meta-i-c md-link"><span class="md-plain">wx.chooseMedia-微信开放文档</span></span></span></p>
<div class="cnblogs_Highlighter">
<pre class="brush:csharp;gutter:true;">wx.chooseMedia({
        //数量 1-9
        count: 1,
        //时长
        maxDuration: '10',
        // 文件类型image 图片video视频   mix同时选择图片和视频
        mediaType: ['video'],
        // 图片和视频选择的来源: album 相册camera相机拍摄
        sourceType: ['camera'],
        //摄像头: back 前置front 后置摄像头
        camera: 'back',
        success(res) {
                console.log(res)
                console.log(res.tempFiles.tempFilePath)
        },
        fail(err) {
                console.log(err)
        }
})
</pre>
</div>
<p>  </p>

</div>
<div id="MySignature" role="contentinfo">
    <p>本文来自博客园,作者:虚乄,转载请注明原文链接:https://www.cnblogs.com/lovejielive/p/18388794</p><br><br>
来源:https://www.cnblogs.com/lovejielive/p/18388794
頁: [1]
查看完整版本: uni-app之camera组件-人脸拍摄