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>

    以下效果图

  • 相关阅读:
    Selenium操作之滚动条
    IntelliJ IDEA代码编码区提示库源不匹配字节码解决办法
    自动化测试浅谈
    json-lib解析json之二维JSONArray
    Java 多态
    Java0基础教程——java的安装
    LAYUI弹出层详解
    ajax实现动态URL
    js serialize()
    TP5.1接入支付宝实现网页/APP支付完整请求回调流程(沙箱环境)
  • 原文地址:https://www.cnblogs.com/getmn/p/10612893.html
Copyright © 2011-2022 走看看