asp.net MVC使用 jsQR 扫描二维码

jsQR是一个js 插件 , 只用前台代码就可以识别出二维码的内容。

下面的例子是复制官网例子写出来的,官网是(有时候github上不了,下载靠运气):

例子
https://cozmo.github.io/jsQR/
代码
https://github.com/cozmo/jsQR

运行的效果如图

 

以下是asp.net MVC项目,首先建立一个mvc项目,最好是用带有摄像头的笔记本电脑来开发测试,页面要调用摄像头。然后在homeControl里面加入一个视图

  public ActionResult ScamQR()
        {
            return View();
        }

并且在scripts文件夹里面加入刚刚下载下来的  jsQR.js  文件。

然后编辑ScamQR View (html 和 js脚步)

@*Scam page*@
@{
    Layout = null;
}

<!DOCTYPE html>

<html>

<head>
    <meta name="viewport" content="width=device-width" />
    <title>ScamQR</title>

    <script src="~/Scripts/jsQR.js"></script>

    <style>
        body {
            font-family: 'Ropa Sans', sans-serif;
            color: #333;
            max-width: 640px;
            margin: 0 auto;
            position: relative;
        }

        #githubLink {
            position: absolute;
            right: 0;
            top: 12px;
            color: #2D99FF;
        }

        h1 {
            margin: 10px 0;
            font-size: 40px;
        }

        #loadingMessage {
            text-align: center;
            padding: 40px;
            background-color: #eee;
        }

        #canvas {
            width: 100%;
        }

        #output {
            margin-top: 20px;
            background: #eee;
            padding: 10px;
            padding-bottom: 0;
        }

            #output div {
                padding-bottom: 10px;
                word-wrap: break-word;
            }

        #noQRFound {
            text-align: center;
        }
    </style>

</head>

<body>
    <div>
    </div>

    <h5>jsQR Scam</h5>
    <div id="loadingMessage">Unable to access video stream (please make sure you have a webcam enabled)</div>
    <canvas id="canvas" hidden></canvas>

    <div id="output" hidden>
        <div id="outputMessage">No QR code detected</div>
        <div hidden><b>Data:</b> <span id="outputData"></span></div>
    </div>

    <script type="text/javascript">
        var video = document.createElement("video");
        var canvasElement = document.getElementById("canvas");
        var canvas = canvasElement.getContext("2d");
        var loadingMessage = document.getElementById("loadingMessage");
        var outputContainer = document.getElementById("output");
        var outputMessage = document.getElementById("outputMessage");
        var outputData = document.getElementById("outputData");

        function drawLine(begin, end, color) {
            canvas.beginPath();
            canvas.moveTo(begin.x, begin.y);
            canvas.lineTo(end.x, end.y);
            canvas.lineWidth = 4;
            canvas.strokeStyle = color;
            canvas.stroke();
        }

        // Use facingMode: environment to attemt to get the front camera on phones
        navigator.mediaDevices.getUserMedia({ video: { facingMode: "environment" } }).then(function (stream) {
            video.srcObject = stream;
            video.setAttribute("playsinline", true); // required to tell iOS safari we don't want fullscreen
            video.play();
            requestAnimationFrame(tick);
        });

        function tick() {
            loadingMessage.innerText = "Loading video..."
            if (video.readyState === video.HAVE_ENOUGH_DATA) {
                loadingMessage.hidden = true;
                canvasElement.hidden = false;
                outputContainer.hidden = false;

                canvasElement.height = video.videoHeight;
                canvasElement.width = video.videoWidth;
                canvas.drawImage(video, 0, 0, canvasElement.width, canvasElement.height);
                var imageData = canvas.getImageData(0, 0, canvasElement.width, canvasElement.height);
                var code = jsQR(imageData.data, imageData.width, imageData.height, {
                    inversionAttempts: "dontInvert",
                });
                if (code) {
                    drawLine(code.location.topLeftCorner, code.location.topRightCorner, "#FF3B58");
                    drawLine(code.location.topRightCorner, code.location.bottomRightCorner, "#FF3B58");
                    drawLine(code.location.bottomRightCorner, code.location.bottomLeftCorner, "#FF3B58");
                    drawLine(code.location.bottomLeftCorner, code.location.topLeftCorner, "#FF3B58");
                    outputMessage.hidden = true;
                    outputData.parentElement.hidden = false;
                    outputData.innerText = code.data;
                    //my code (goto new page)
                    //window.location.href = "/home/editRes?qr=" + code.data;
                } else {
                    outputMessage.hidden = false;
                    outputData.parentElement.hidden = true;
                }
            }
            requestAnimationFrame(tick);
        }
    </script>

</body>

</html>

 这样就做好了,只需前台代码,很方便好用。

备注:发布网站的时候,需要用https协议。由于手机打开摄像头需要安全连接,所以是https

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
使用jsqr插件读取二维码内容在Vue H5项目中可以按照以下步骤进行: 1.首先,在Vue项目中安装jsqr插件。可以使用npm或yarn来安装,具体安装命令如下: npm install jsqr 或 yarn add jsqr 2.在Vue项目中的组件中引入jsqr插件。可以在需要使用的组件中的script标签中使用import语句引入插件,具体代码如下: import jsqr from 'jsqr'; 3.在Vue项目中的组件中编写读取二维码内容的方法。可以在需要读取二维码的地方调用该方法,具体代码如下: methods: { readQRCode() { const canvas = document.querySelector('canvas'); //获取二维码所在的画布元素 const context = canvas.getContext('2d'); const imageData = context.getImageData(0, 0, canvas.width, canvas.height); const code = jsqr(imageData.data, imageData.width, imageData.height); //调用jsqr插件的方法读取二维码内容 if (code) { console.log('二维码内容:' + code.data); } } } 4.在Vue项目中的组件中调用读取二维码内容的方法。可以在需要读取二维码的事件或生命周期函数中调用该方法,具体代码如下: mounted() { this.readQRCode(); //在页面加载完成后调用方法读取二维码内容 } 5.在Vue项目中的组件模板中添加二维码所在的画布元素。可以在需要显示二维码的地方添加一个canvas元素,具体代码如下: <canvas></canvas> 通过以上步骤,就可以在Vue H5项目中使用jsqr插件来读取二维码的内容了。注意,使用该插件需要确保摄像头权限被允许,并且在合适的时机调用读取二维码内容的方法,以获得正确的结果。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值