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>

    以下效果图

  • 相关阅读:
    HTML5之画布的拖拽/拖放
    HDU 4028 The time of a day STL 模拟题
    java 使用htmlunit模拟登录爬取新浪微博页面
    【java.lang.UnsupportedClassVersionError】版本不一致出错
    Unsupported major.minor version 52.0
    java.lang.NoClassDefFoundError: org/w3c/dom/ElementTraversal问题解决
    htmlunit抓取js执行后的网页源码
    Maven添加本地依赖
    htmlunit爬取js异步加载后的页面
    HtmlUnit爬取Ajax动态生成的网页以及自动调用页面javascript函数
  • 原文地址:https://www.cnblogs.com/getmn/p/10612893.html
Copyright © 2011-2022 走看看