zoukankan      html  css  js  c++  java
  • vue项目中实现上传图片识别二维码jsQR

    效果图:

     jsQR 是一个纯 JavaScript 二维码解析库。该库读取原始图像或者是摄像头,并将定位,提取和解析其中的任何QR码。(来源:https://www.oschina.net/p/jsqr?hmsr=aladdin1e1

    1、 安装jsQR :  npm install jsqr --save 

    2、 jsQR方法使用实例:https://www.cnblogs.com/wenqd/p/11541030.html

    var imageData = ctx.getImageData(0, 0, img.width, img.height);
    const code = jsQR(imageData.data, imageData.width, imageData.height, {
        inversionAttempts: "dontInvert",
    });
    if(code){
        showCode(code.data)
    }else{
        alert("识别错误")
    }

     全部代码如下:

    <template>
        <div id="app">
            <span>{{result}}</span>
            <br>
            <input type="file" accept="image/png, image/jpeg" @change="changeFile"> </input>
            <br>
            <img id="myimg" v-show="false">
            <canvas id="mycanvas"></canvas>
        </div>
    </template>
    
    <script>
        import jsQR from "jsqr"
        export default {
            data() {
                return {
                    result: "",
                }
            },
            methods: {
                changeFile(e) {
                    var that = this;
                    that.result = "请上传二维码";
                    console.dir(e.target.files[0].name);
                    var fileReader = new FileReader();
    
                    fileReader.onload = function(event) {
                        var data = event.target.result;
                        // console.dir(data);
                        var img = document.getElementById("myimg");
                        img.src = data;
    
                        img.onload = function() {
                            var mycanvas = document.getElementById("mycanvas");
                            var ctx = mycanvas.getContext("2d");
                            // canvas 的width/height重新设置的时候会清空画布
                            mycanvas.width = img.width;
                            mycanvas.height = img.height;
    
                            ctx.drawImage(img, 0, 0);
                            var imageData = ctx.getImageData(0, 0, img.width, img.height);
                            console.log(imageData);
                            
                            const code = jsQR(imageData.data, imageData.width, imageData.height, {
                                inversionAttempts: "dontInvert",
                            });
                            if (code) {
                                console.log(code.data);
                            } else {
                                console.log("识别错误");
                            }
                            that.result = code.data;
                        }
                    }
                    fileReader.readAsDataURL(e.target.files[0]);
                }
            }
        }
    </script>
    <style>
    
    </style>
  • 相关阅读:
    Qt中QString,int,char,QByteArray之间相互转换
    Qt中的多线程编程
    在Qt中使用sleep(包含为win and *nix下sleep函数的实现及用法)
    Qt Creator 快捷键
    基于FFmpeg和Qt的播放器 QtAV库
    Ubuntu下APACHE HTTPS安装和配置
    很受欢迎的Linux笔记(短小精悍)
    QT基本使用
    FLV封装格式及分析器工具
    AVPicture、AVFrame和AVPacket
  • 原文地址:https://www.cnblogs.com/sunshine233/p/15740624.html
Copyright © 2011-2022 走看看