使用quaggaJS识别图片中的条形码

使用quaggaJS识别图片中的条形码

quaggaJS是一个纯JS的插件,用于识别图片中的条形码,很方便。一般用于移动端拍照识别,也可以在网页端上传图片识别。

github下载地址

首先要指定正确格式的条形码,常见的条形码编码类型有EAN和CODE128。

另外,并不是所有图片中的条形码都可以被识别出来,而且正确率也不是100%。

下面是识别网页上传图片中条码的方法。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
</head>
<body>
<section id="container" class="container">
 <div class="controls">
   <fieldset class="input-group">
     <input type="file" accept="image/*;capture=camera">
        <button id="btnIdents">识别</button>
   </fieldset>
 </div>
 <div id="interactive" class="viewport"><br clear="all"></div>
</section>
<script src="https://cdn.bootcss.com/jquery/2.0.3/jquery.js" type="text/javascript"></script>
<script src="./js/quagga.js" type="text/javascript"></script>
<link rel="stylesheet" type="text/css" href="./css/fileinput.css">
<script src="./js/file_input.js" type="text/javascript"></script>
<script type="text/javascript">
    
$(function() {var App = {
        init: function() {
            App.attachListeners();
        },
        attachListeners: function() {
            var self = this;
            $("#btnIdents").on("click", function(e) {
                var input = document.querySelector(".controls input[type=file]");
                if (input.files && input.files.length) {
                    App.decode(URL.createObjectURL(input.files[0]));
                }
            });
        },
        decode: function(src) {
            var self = this,
                config = $.extend({}, self.state, {src: src});
            Quagga.decodeSingle(config, function(result) {
                //识别结果
                if(result.codeResult){
                    console.log(result.codeResult.code);
                    alert("图片中的条形码为:" + result.codeResult.code);
                }else{
                    alert("未识别到图片中的条形码!");
                }
            });
        },
        state: {
            inputStream: {
                size: 800,
                singleChannel: false
            },
            locator: {
                patchSize: "medium",
                halfSample: true
            },
            decoder: {
                readers: [{
                    format: "code_128_reader",
                    config: {}
                }]
            },
            locate: true,
            src: null
        }
    };

    App.init();
});
</script>
</body>
</html>

运行效果

补充:上面的代码主要是参考了官方的demo,后来又按自己的习惯写了一遍,也贴上来。运行效果是一样的。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
</head>
<body>
<section id="container" class="container">
 <div class="controls">
   <fieldset class="input-group">
     <input type="file" accept="image/*;capture=camera">
        <button id="btnIdents">识别</button>
   </fieldset>
 </div>
 <div id="interactive" class="viewport"><br clear="all"></div>
</section>
<script src="https://cdn.bootcss.com/jquery/2.0.3/jquery.js" type="text/javascript"></script>
<script src="./js/quagga.js" type="text/javascript"></script>
<link rel="stylesheet" type="text/css" href="./css/fileinput.css">
<script src="./js/file_input.js" type="text/javascript"></script>
<script type="text/javascript">

 $(function() {
            $("#btnIdents").click(function() {
            var input = document.querySelector(".controls input[type=file]");
            if (input.files && input.files.length) {
                decode(URL.createObjectURL(input.files[0]));
            }
            });
});

function decode(src){
      var config = {
            inputStream: {
            size: 800,
            singleChannel: false
            },
            locator: {
                patchSize: "medium",
                halfSample: true
               },
             decoder: {
                readers: [{
                     format: "code_128_reader",
                     config: {}
                    }]
                },
             locate: true,
              src: src
       }

       Quagga.decodeSingle(config, function(result) {
                if(!result){
                   alert("图片中没有条形码!");
                   return false;
                }
                //识别结果
                if(result.codeResult){
                    console.log("图片中的条形码为:"+result.codeResult.code);
                    alert("图片中的条形码为:" + result.codeResult.code);
                }else{
                    alert("未识别到图片中的条形码!");
                }
       });
}

</script>
</body>
</html>

 另外,如果不是文件上传的话,可以传图片的url进行识别。

   function decode(img_url) {
            var config = {
                readers: ["code_128_reader"],
                locate: true,
                src : img_url
            }
            Quagga.decodeSingle(config, function (result) {
                console.log("decoding...");
                if (!result) {
                    console.log("图片中没有条形码!");
                    return false;
                }
                //识别结果
                if (result.codeResult) {
                    console.log("图片中的条形码为:" + result.codeResult.code);
                } else {
                    console.log("未识别到图片中的条形码!");
                }
            });
        }

  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
QuaggaJS是一个开源的JavaScript库,用于在网页上实现二维码和条形码识别。通过使用QuaggaJS,您可以将文件的二维码解码为文本或URI等数据类型。 以下是实现此功能的一些步骤: 1. 在网页导入QuaggaJS库: ```html <script src=&quot;https://cdn.jsdelivr.net/npm/quagga/dist/quagga.min.js&quot;></script> ``` 2. 创建一个HTML元素,用于显示文件内容和识别结果: ```html <input type=&quot;file&quot; id=&quot;file-input&quot;> <div id=&quot;result&quot;></div> ``` 3. 使用JavaScript获取文件数据,并将其传递给QuaggaJS库进行识别: ```javascript const fileInput = document.getElementById('file-input'); const resultDiv = document.getElementById('result'); fileInput.addEventListener('change', (event) => { const file = event.target.files[0]; const reader = new FileReader(); reader.onload = (event) => { const imageData = event.target.result; Quagga.decodeSingle({ src: imageData, numOfWorkers: 0, inputStream: { size: 800 }, decoder: { readers: ['qrcode_reader'] }, locate: true }, (result) => { if (result && result.codeResult) { resultDiv.innerText = result.codeResult.code; } else { resultDiv.innerText = '未能识别二维码'; } }); }; reader.readAsDataURL(file); }); ``` 在上面的示例,我们使用QuaggaJS的`decodeSingle`方法对文件的二维码进行解码。该方法需要一个配置对象,该对象包含图像数据、读取器类型和其他选项。一旦解码完成,结果将传递给回调函数,并将显示在HTML元素。 请注意,在上面的示例,我们仅使用`qrcode_reader`读取器来识别二维码。如果您需要识别其他二维码类型或条形码,请查阅QuaggaJS文档以获取更多信息。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值