H5实现调用摄像头扫二维码,识别图片中的二维码(vue篇)

1、安装依赖

npm i html5-qrcode

2、vue页面代码

<template>
  <div class="qrcode">
    <div id="reader"></div>
    <input type="file" id="upload-input" accept="image/*" value="" style="display: none">
    <el-button class="uploadImg" @click="useLocal" icon="el-icon-picture-outline-round">Picture</el-button>
    <el-button class="blackIndex" @click="goBack" icon="el-icon-arrow-left">Back</el-button>
  </div>
</template>

<script>
import {Html5Qrcode} from "html5-qrcode";

export default {
  data(){
    return {
      html5QrCode:null,
      uploadInput:null
    }
  },
  created() {},
  mounted() {
    this.getCameras();
    this.uploadInput = document.getElementById('upload-input');
  },
  beforeDestroy() {
    this.stop();
  },
  methods: {
    //获取摄像头权限
    getCameras() {
      var that_=this
      Html5Qrcode.getCameras().then((devices) => {
          if (devices && devices.length) {
            this.html5QrCode = new Html5Qrcode("reader");
            this.start();
          }
        }).catch((err) => {
          alert("您需要授予相机访问权限!")
          that_.html5QrCode = new Html5Qrcode("reader");
          that_.goBack()
        });
    },
    //调用摄像头识别二维码
    start() {
      let config = { fps: 10, qrbox: { width: 300, height: 280 } }; //扫一扫相关设置
      this.html5QrCode.start(
          {facingMode: "environment"},
          config,
          (decodedText, decodedResult) => {
            console.log(decodedText)
          }
        ).catch((err) => {
          alert("扫码失败:\n" + err)
        });
    },
    //退出识别
    stop() {
      this.html5QrCode.stop().then((ignore) => {
        // QR Code scanning is stopped.
        console.log("QR Code scanning stopped.");
      })
        .catch((err) => {
          // Stop failed, handle it.
          console.log("Unable to stop scanning.");
        });
    },
    //选择图片识别二维码
    useLocal() {
      this.stop();
      this.uploadInput.click()
      this.uploadInput.addEventListener("change", (e) => {
        if (e.target.files.length == 0) {
          return;
        }
        const imageFile = e.target.files[0];
        this.html5QrCode.scanFile(imageFile, true).then((decodedText) => {
            console.log(decodedText)
          }).catch((err) => {
            alert("识别出错:\n" + error)
          });
      });
    },
    goBack(){
      this.$router.go(-1)
    }
  }
}
</script>
<style lang="scss" scoped>
.qrcode {
  width: 100%;
  height: 100vh;
  overflow: hidden;
  text-align: center;
  padding: 0 0;
  margin: 0 auto;
  background: rgba($color: #000000, $alpha: 0.48);
}
#reader {
  top: 50%;
  left: 0;
  transform: translateY(-50%);
}
.uploadImg{
  position: fixed;
  top: 4vh;
  right: 2rem;
}
.blackIndex{
  position: fixed;
  top: 4vh;
  left: 2rem;
}
</style>

3、注意事项

该功能的实现,需要将项目发布在https的环境中;或者在localhost环境中调试

  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Vue H5,如果要在安卓系统上识别二维码,可以使用第三方库进行实现。其比较常用的库有两个,分别是QuaggaJS和zxing。下面分别对这两个库进行简单介绍: 1. QuaggaJS QuaggaJS是一个用于条形码和二维码描的JavaScript库,可以实现跨平台的条形码和二维码描功能。具体使用可以按照以下步骤进行: 1)使用npm安装quagga库:npm install quagga 2)引入quagga: import Quagga from 'quagga'; 3)在mounted生命周期钩子函数初始化Quagga: mounted() { Quagga.init({ inputStream : { name : "Live", type : "LiveStream", target: document.querySelector('#yourElement') }, decoder : { readers : ['ean_reader', 'ean_8_reader'] } }, function(err) { if (err) { console.log(err); return; } Quagga.start(); }); } 4)在使用时,可以在页面设置一个元素,通过查询选择器获取到该元素,将其传入到配置,就可以在该元素上展示识别到的二维码信息。 2. zxing zxing是一款开源的条形码和二维码识别库,使用简单,但是较QuaggaJS略显复杂,需要按以下步骤进行设置: 1)使用npm安装zxing库:npm install zxing 2)引入zxing: import zxing from 'zxing'; 3)新建一个单例的描器对象: const scanner = new zxing.BrowserQRCodeReader(); 4)在使用时,可以通过调用描器对象的方法,获取到描后的结果。具体使用可以参考下面的代码样例: startScan() { scanner.getVideoInputDevices() .then((video) => { console.log("videoInputDevices", video); return scanner.decodeFromVideoDevice(video[0].deviceId, 'video'); }) .then((result) => { console.log(result); }) .catch((err) => { console.error(err); }) } 综上所述,以上是在Vue H5实现安卓系统二维码识别的两种方案,开发者可以根据自己的实际需求来选择其的一种进行使用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值