zoukankan      html  css  js  c++  java
  • 二维码扫码问题

    昨天朋友问了一个关于H5解析二维码的问题

    研究了下,给出了两张方案

    第一种方案(后端解码实现)

    项目用的MVC,下面上下代码

    //前端主要一个上传图片功能
    //直接上后端解析代码
    //File 图片路径
     using (Bitmap bmp = new Bitmap(File))
     {
            BarcodeReader reader = new BarcodeReader();
            reader.Options.CharacterSet = "UTF-8";
            Result result = reader.Decode(bmp);
            meg = "识别结果:" + result.Text;
    }

    后端解码用到的DLL是Zxing

    第二种方案(前端解码,使用Zxing js)

    <body>
        <div style="text-align:center">
            <div class="row ">
                <div class="col-sm-12">
                    <div class="form-group mg-t20 text-center">
                        @*将摄像设备的影像实时到该控件*@
                        <video id="video" style="border: 1px solid gray;100%;height:70%"></video>
                    </div>
                </div>
            </div>
            <button class="btn btn-success" type="submit" id="sub">开始扫描</button>
            <button class="btn btn-success" type="submit" id="res">重置</button>
            <div class="row">
                <div class="col-sm-12">
                    <label>扫描结果:</label>
                    <blockquote>
                        <p id="result"></p>
                    </blockquote>
                </div>
            </div>
        </div>
    </body>
    <script src="~/Scripts/zxing.qrcodereader.min.js"></script>
    <script>
        const codeReader = new ZXing.BrowserQRCodeReader()
        //页面加载首先获取摄像设备
        codeReader.getVideoInputDevices()
            .then((videoInputDevices) => {
                //默认获取第一个摄像头设备id
                var firstDeviceId = videoInputDevices[0].deviceId;
                //获取第一个摄像头设备的名称
                var videoInputDeviceslablestr = JSON.stringify(videoInputDevices[0].label);
                if (videoInputDevices.length > 1) {
                    //判断是否后置摄像头
                    if (videoInputDeviceslablestr.indexOf("back") > -1) {
                        firstDeviceId = videoInputDevices[0].deviceId;
                    }
                    else {
                        firstDeviceId = videoInputDevices[1].deviceId;
                    }
                }
                //识别按钮注册点击事件
                document.getElementById('sub').addEventListener('click', () => {
                    //解码摄像头影像到video
                    //result:识别结果
                    //video:展现控件
                    codeReader.decodeFromInputVideoDevice(firstDeviceId, 'video').then((result) => {
                        alert("识别成功:" + result.text);
                        $("#result").val("识别结果:" + result.text);
                    }).catch((err) => {
                        alert("错误提示:" + err);
                    })
                });
                //result重置
                document.getElementById('res').addEventListener('click', () => {
                    codeReader.reset();
                });
            })
            .catch((err) => {
                alert("获取不到摄像设备,请在手机浏览器中打开(微信浏览器不支持调用)");
            });
    </script>

    以下效果图

  • 相关阅读:
    java中JSON转换
    使用Admin监控
    linux安装tomcat
    SpringBoot整合Redis
    linux6.8安装docker
    使用Actuator监控
    SpringBoot集成阿里巴巴Druid监控
    使用Log4j日志处理
    SpringBoot多数据源
    SpringBoot文件上传下载
  • 原文地址:https://www.cnblogs.com/getmn/p/10612893.html
Copyright © 2011-2022 走看看