前言:在某些情况下当需要隔一定时间抓拍一张照片传给服务器识别
代码:
<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>