uniapp开发的微信小程序——自动抓拍照片功能

文章描述了如何在前端模板中集成摄像组件,通过定时抓拍用户照片,然后利用codeDecodeAPI进行二维码识别,判断是否为同一个人,进而跳转到相应页面。
摘要由CSDN通过智能技术生成

前言:在某些情况下当需要隔一定时间抓拍一张照片传给服务器识别

代码:

<template>
    <view class="container">
        <view class="check-img">
            <!-- 视频组件 -->
            <camera device-position="back" class="img" flash="off" @error="error" style="width: 100vw; height: 60vh;">
            </camera> 

            <!-- 对准框 -->
            <div class="camera2" :style="{ 'background-image': `url(${kuankuan})` }"></div>

            <!-- 扫描动画 -->
            <view class="check-await"></view>
        </view>
    </view>
</template>

<script>
    import {
        codeDecodeAPI
    } from '@/api/myApi.js'

//
    export default {
        data() {
            return {
                kuankuan: this.$store.state.baseUrl + '/images_fjfw/kuankuan.png',
                timer: null
            }
        },
        onLoad(option) {

        },
        onShow() {
            this.changeAvatar()
        },
        mounted() {},
        components: {},
        filters: {},
        watch: {},
        computed: {},
        methods: {
            //关闭抓拍
            stopCamera() {
                clearInterval(this.timer);
                this.timer = null;
            },
            
            //调用摄像头
            changeAvatar() {
                const cameraContext = uni.createCameraContext();
                this.timer = setInterval(() => {
                    cameraContext.takePhoto({
                        quality: 'high',
                        success: res => {
                            const src = res.tempImagePath
                            console.log(src, 'res.tempImagePath');
                            const base64_dt = uni.getFileSystemManager().readFileSync(src, 'base64')
                            const fileName_dt = src.lastIndexOf('.') // 取到文件名开始到最后一个点的长度
                            const base64_img = 'data:image/' + fileName_dt + ';base64,' + base64_dt
            
                            codeDecodeAPI({
                                qr_image: base64_img
                            }).then(res => {
                                if(res.code=='2'){
                                    uni.navigateTo({
                                        url: '/pages/nonono/nonono'
                                    })
                                    this.stopCamera()
                                }else if (res.data.consistent == '1') {
                                    console.log('同一个人')
                                    uni.navigateTo({
                                        url: '/pages/okBuy/okBuy?item=' + JSON.stringify(res.data)
                                    })
                                    this.stopCamera()
                                } else if (res.data.consistent == '2') {
                                    console.log('不是同一个人')
                                    uni.navigateTo({
                                        url: '/pages/warn/warn?item=' + JSON.stringify(res.data)
                                    })
                                    this.stopCamera()
                                }
                            }).catch(err => {
                                console.log(err);
                            })
            
                        },
                        fail: err => {
                            console.error('拍照失败', err);
                        }
                    });
                }, 3000);
            }
            
        },
    }
</script>

<style lang="scss" scoped>
    .container {
        display: flex;
        justify-content: center;
        align-items: center;
        background-color: #000;
        width: 100%;
        height: 100vh;
    }

.camera2 {
    position: absolute;
    top: 50%;
    left: 50%;
    transform: translate(-43%, -50%);
    width: 449.89rpx;
    height: 389.64rpx;
    background-size: contain;
    background-repeat: no-repeat;
}

    .check-await {
        position: absolute;
        width: 100vw;
        height: 40px;
        filter: blur(0px);
        margin: auto;
        // left: 0;
        // right: 0;
        transform: translateY(-1000px);
        animation: move 2s linear infinite;
    }

    @keyframes move {
        0% {
            transform: translateY(-520px);
            background: linear-gradient(180deg, rgba(84, 181, 105, 0) 0%, #10ff44 100%);
        }

        100% {
            transform: translateY(-45px);
            background: linear-gradient(180deg, rgba(84, 181, 105, 0) 0%, #10ff44 100%);
        }
    }

    .check-img {
        position: relative;

    }

    .check-img .img {
        // width: 320px;
        // height: 320px;
        // border-radius: 5px;
        background: linear-gradient(180deg, #f0f0f2 0%, #d8dce0 100%);
    }

</style>

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值