精华内容
下载资源
问答
  • 二维码扫描工具
    2022-05-31 16:51:01

    JS实现网页二维码扫描功能

    最近接到一个任务,实现网页版的二维码扫描,刚开始以为会很简单,没想到大意失荆州,网上的教程资料很多,可是可以用的不多,所幸我最终做了出来,所以分享给大家,大家一起进步。

    代码

    HTML部分代码

    <html>
    	<head>
            <meta charset="utf-8" />
    		<title>Scanner</title>
            <script src="jquery.min.js"></script>
            <script src="jsQR.js"></script>
    	</head>
    	<body>
    		<canvas id="qr-canvas" width="800" height="600"></canvas>
    		<video id="v" autoplay></video>
    		<script type="text/javascript" src="qrcode.js"></script>
    		<script type="text/javascript" src="scan.js"></script>
    	</body>
    </html>
    

    共通JS文件路径

    https://gitee.com/kedu666/scanner/blob/master/JS/jquery.min.js
    https://gitee.com/kedu666/scanner/blob/master/JS/jsQR.js
    https://gitee.com/kedu666/scanner/blob/master/JS/qrcode.js

    scan.js的代码

       //是否成功调用getUserMedia标识
       var gUM=false;
       //画布getContext对象
       var gCtx = null;
       // 数据流对象
       var imageData =null;
       //视频展示对象
       var v=document.getElementById("v");
       var n=navigator;
       // 画布元素
       var gCanvas = document.getElementById("qr-canvas");
       gCtx = gCanvas.getContext('2d');
       qrcode.callback = function(e){
    	  //结果回调
    	  alert(e);
       }
       //不同getUserMedia处理
       if(n.getUserMedia){
    	  // 移动设备打开后置摄像头【 facingMode: "environment"】 
    	  n.getUserMedia({video: { facingMode: "environment"}}, success, error);
    	  }
       else
       if(n.mediaDevices.getUserMedia){
    	  n.mediaDevices.getUserMedia({video: { facingMode: "environment"} , audio: false})
    			.then(success)
    			.catch(error);
    	}
       else
       if(n.webkitGetUserMedia)
       {
    	  webkit=true;
    	  n.webkitGetUserMedia({video:{ facingMode: "environment"}}, success, error);
       }
       else
       if(n.mozGetUserMedia)
       {
    	  moz=true;
    	  n.mozGetUserMedia({video: { facingMode: "environment"}}, success, error);
       }
       //getUserMedia调用成功
       function success(stream) {			   
    		v=document.getElementById("v");	
    		try{
    			 v.srcObject = stream;
    		}catch{
    		//这里是兼容写法
    			let compatibleURL = window.URL || window.webkitURL;
    			v.src = compatibleURL.createObjectURL(stream);
    		}
    	  gUM=true;
    	  setTimeout(captureToCanvas, 500);
       }
       //getUserMedia调用失败
       function error(error) {
    	  gUM=false;
    	  return;
       }
     
       //将视频流放到画布
    function captureToCanvas() {
      if(gUM){
    		gCtx.drawImage(v,0,0);
    		
    		setTimeout(captureToCanvas, 500);
    		
    		imageData = gCtx.getImageData(0,0,600,800);
    		
    		const code = jsQR(imageData.data, imageData.width, imageData.height, {
    			inversionAttempts: "dontInvert",
    		});
    		
    		alert('code.data:'+code.data);
    		
    		if(code){
    			window.location.href = code.data;
    		}else{
    			alert("识别错误")
    		}
    	}
       }
    

    代码运行步骤

    第一步:将这些文件下载到本地文件夹
    第二步:将文件见打包成.zip压缩包
    第三步:通过微信上传到移动端,
    第四步:通过zip压缩工具将文件解压缩
    第五步:以浏览器的形式打开html文件,打开的同时将启用摄像头
    第六步:对准提前准备好的二维码图片进行扫描。

    由于本人一直从事数据库后端开发,对前端了解不多,所以页面比较简陋,但是基本功能实现了,希望这些代码对正在进行二维码扫描开发的朋友们有帮助,有问题可以给我留言,我们一起探讨,一起进步。

    更多相关内容
  • 一个方便、简单二维码扫描工具,有空拿出来扫一下
  • 微信二维码扫描工具

    2012-12-22 10:34:55
    可以在PC上扫描微信的二维码 摄像头坏了的朋友可以在电脑上实现扫描了 我找了好长时间的 在这里分享给大家 亲测可用
  • QRCodeReaderView 是基于 ZXING 条形码扫描工具项目改进,为了在肖像模式和增强现实目的下进行更简单的 Android 二维码检测。此项目可以在相机的预览中显示是否有二维码
  • zbar扫描快,zxing可以生成和识别本地,So,我就把他们结合在了一起,这样二维码识别就更便捷了(包含主要功能,二维码识别生成,条形码识别生成) 预览 ! 更新日志 计划功能 1.加入内部权限处理 2018-03-13 1.修复...
  • CTF之二维码扫描.7z

    2021-12-02 12:15:57
    CTF入门之二维码扫描神器,支持二维码修复
  • zxing是一个开放源码的,用Java实现的多种格式的1D/2D条码图像处理库,它包含了联系到其他语言的接口;可以实现使用手机的内置的摄像头完成条形码和二维码扫描与解码;也可以实现条形码和二维码的编码与解码。
  • android 仿微信二维码扫描工具

    热门讨论 2013-09-09 11:39:00
    基于zxing的工具,封装出来的扫描工具,可以在CaptureActivity这个类中对界面进行修改,在ViewfinderView对扫描框进行深度修改。
  • 二维码扫描工具(中文破译) 简单随意 可以直接使用截图功能,最快捷
  • 二维码处理神器CQR

    2020-11-05 18:17:53
    二维条码/二维码(2-dimensional bar code)是用某种特定的几何图形按一定规律在平面(二维方向上)分布的、黑白相间的、记录数据符号信息的图形;在代码编制上巧妙地利用构成计算机内部逻辑基础的“0”、“1”比特...
  • 优先本地识别二维码,当本地识别不成功时会自动联网调用草料二维码接口识别。 优先本地识别二维码,当本地识别不成功时会自动联网调用草料二维码接口识别。
  • windows桌面二维码扫描器,手机不在的时候也能扫二维码了!CTFer做题必备!屏幕上的二维码直接扫,还用截什么图,还用保存什么图片,工具什么的一个就够了!
  • 2款二维码扫描工具
  • 大家都知道手机可以扫描二维码的软件很多,但是电脑版扫描二维码的软件却不多,特别是可以利用自带摄像头扫描二维码的软件,这款软件可以实现利用自带摄像头扫描二维码! 注意!注意!,本软件不支持windows 8.x...
  • web前端实现二维码扫描解析功能。引入对应js即可。
  • 工具用于学习交流用途,切勿用于其它用途。
  • 二维码识别工具

    2013-07-31 23:09:29
    二维码识别工具,可以很方便的识别二维码,生成二维码
  • 二维码工具集合(暂时只有解析二维码功能) 和大多数二维码工具主要的差别是支持命令行参数,即直接配置快捷方式 搭配直接识别屏幕中的二维码的功能,方便随时解析二维码 功能: 解析屏幕上的二维码(支持多屏) 解析...
  • 无需网络,也可以扫描识别二维的小工具。 扫一扫 离线版 二维码扫描 简易
  • WSLNativeScanTool是在利用原生API的条件下封装的二维码扫描工具,支持二维码的扫描、识别图中二维码、生成自定义颜色和中心图标的二维码、监测环境亮度、打开闪光灯这些功能;WSLScanView是参照微信封装的一个扫一...
  • windows二维码工具3.0

    千次阅读 2018-06-24 08:59:14
    windows二维码工具3.0 工具说明 先看下最新版本工具界面 本次升级优化如下内容: - 增加解二维码功能 - “二维码”和“logo文件”可直接拖进图片 源码解析 python二维码解析库常用的有zbar、zbarlight...

    windows二维码工具3.0

    工具说明

    先看下最新版本工具界面
    这里写图片描述

    本次升级优化如下内容:
    - 增加解二维码功能
    - “二维码”和“logo文件”可直接拖进图片

    这里写图片描述

    源码解析

    python二维码解析库常用的有zbar、zbarlight、zxing

    1、zbar和zbarlight内核一致,都是基于zbar的dll编译加载的。
    2、zbarlight使用比zbar更简单,不过是在zbar的基础又做了一点点封装而已。
    3、zxing是基于java的zxing核心的python分支,其原理是调用javaw 加载zxing的core.jar包,再获取输出结果。

    但zbar不支持python3,zbarlight也是同理。而zxing使用还得去调用java有些麻烦。之后在github找到了python3的库pyzbar

    def decodeQr(filename):
        from pyzbar.pyzbar import decode
    
        if os.path.exists(filename):
            d =  decode(Image.open(filename))
            return  d[0].data
        else:
            return ''

    pyqt5 输入控拖拽功能的实现

    class LineEditEx(QtWidgets.QLineEdit):
        '''重写QLineEdit'''
        def __init__(self, parent=None):
            super().__init__(None, parent)
            self.setGeometry(50, 50, 100, 20)
            self.setAcceptDrops(True)
            self.setDragEnabled(True)  # 开启可拖放事件
    
        def dragEnterEvent(self, QDragEnterEvent):
            e = QDragEnterEvent
            if e.mimeData().hasText():
                e.accept()
            else:
                e.ignore()
    
        def dropEvent(self, e):
            file = str(e.mimeData().text()).split('file:///')[1]
            self.setText(file)

    源码及工具

    链接:https://pan.baidu.com/s/1rcAR-JpRcSb1uR3MdpqCTQ
    密码:bu5q

    这里写图片描述

    展开全文
  • BUUCTF之二维码

    千次阅读 多人点赞 2021-10-27 10:47:59
    毫不犹豫打开二维码扫描工具QR research进行扫描 天真认为这就是flag点击提交(不放过任何一次机会),结果当然没过啦! 没死心以为是空格的原因,删去空格再次提交,当然还是没过啦! 于是菜鸡开始看教程,向菜...

    二维码

    题目

    在这里插入图片描述

    解题过程

    • 下载附件发现是一个压缩包。
    • 解压,发现里面存在一张二维码。

    在这里插入图片描述

    • 毫不犹豫打开二维码扫描工具QR research进行扫描

    在这里插入图片描述

    • 天真认为这就是flag点击提交(不放过任何一次机会),结果当然没过啦!
    • 没死心以为是空格的原因,删去空格再次提交,当然还是没过啦!
    • 于是菜鸡开始看教程,向菜狗求救!!!
    • 由于附件中只有一张二维码,而且刚才的提示信息secret is here 表明flag确实在这里,于是想到可能在图片中可能隐藏了其他文件。隐藏原理如下:
    一个完整的 JPG 文件由 FF D8 开头,FF D9结尾
    图片浏览器会忽略 FF D9 以后的内容,因此可以在 JPG 文件中加入其他文件。
    其余同理:
    png
    十进制数137 80 78 71 13 10 26 10
    十六进制数 89 50 4e 47 0d 0a 1a 0a
    gif
    图像开始标志:47 49 46 38 39 61  
    结束标志:01 01 00 3B
    
    • 首先使用kali查看该二维码图片信息,发现了4number.txt,还有一些PK值,敏感想到可能隐藏了一个zip压缩包(zip的创始人名字简写为PK)和4number.txt文件。
      在这里插入图片描述
    • 当然,既然身在kali环境下,当然要使用Kali下的专业工具binwalk进行检测,结果如下,检测出图片中存在压缩包。
      在这里插入图片描述
    • 那么下一步当然是分离出这个压缩包,利用Linux下的foremost工具,foremost 图片名,结果如下
      在这里插入图片描述
    • 当然直冲zip文件夹,并尝试解压zip文件,却发现需要密码,,随便输了几个密码,失败告终。
      在这里插入图片描述
    • 那还想啥,当然暴力破解啦!,,但回想起看到文件名是4number.txt,似乎是在提示我们密码是一个4位数字。于是破解开始:密码是7639

    在这里插入图片描述

    参数解释:
    -b:			使用暴力破解
    -c 1:			使用字符集,1指数字集合
    -l 4-4:		指定密码长度,最小长度-最大长度
    -u:			不显示错误密码,仅显示最终正确密码
    
    • 下面用密码解压压缩包,得到4number.txt文件,查看该文件后发现flag。
      在这里插入图片描述
    • 提交通过

    补充:windows系统下的解题流程

    • 扫描二维码无果后,先将png图片更改后缀转为txt文件,同样发现了4number.txt,还有一些PK值,敏感想到可能隐藏了一个zip压缩包(zip的创始人名字简写为PK)和4number.txt文件。
      在这里插入图片描述
    • 再将后缀改为zip格式,用压缩软件能打开,并且发现一个4number.txt文件(猜想正确)。
      在这里插入图片描述
    • 尝试打开,却发现需要解压密码。。
      在这里插入图片描述
    • 然后用zip爆破工具爆破就好了。
      在这里插入图片描述
    • 打开4number.txt文件,得到flag。

    总结

    挺简单的一道题,做的无比复杂,就当学着用工具了吧!!!
    在网上找了好久windows下的压缩包破解工具,或多或少都有缺陷。。。

    附录

    • 采用010editor工具分析文件头,佐证上述猜测。
      在这里插入图片描述
    展开全文
  • 源码LGScanViewController,该源码案例是一款非常不错的swift2.0 版的二维码扫描代码 基于AVFoundation,swift QRCode swift版的二维码扫描工具,使用起来非常方便,基于swift2.0实现; 支持二维码和条形码扫描;
  • 二维码扫描技术代码

    2017-10-31 11:56:07
    亲测,可以使用。利用zxingbarcode的精简包,android studio的软件工具制作的。
  • 二维码生成工具类: import android.content.Context; import android.graphics.Bitmap; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.PointF; import android....

    二维码生成工具类:

    
    
    import android.content.Context;
    import android.graphics.Bitmap;
    import android.graphics.Canvas;
    import android.graphics.Color;
    import android.graphics.PointF;
    import android.view.Gravity;
    import android.view.View;
    import android.widget.LinearLayout;
    import android.widget.TextView;
    
    import com.google.zxing.BarcodeFormat;
    import com.google.zxing.EncodeHintType;
    import com.google.zxing.MultiFormatWriter;
    import com.google.zxing.WriterException;
    import com.google.zxing.common.BitMatrix;
    import com.google.zxing.qrcode.QRCodeWriter;
    
    import java.util.Hashtable;
    
    public class ZXingUtils {
        /**
         * 生成二维码 要转换的地址或字符串,可以是中文
         *
         * @param content  内容
         * @param width 生成的宽度
         * @param height  生成的高度
         * @return
         */
        public static Bitmap createQRImage(String content, final int width, final int height) {
            try {
                // 判断URL合法性
                if (content== null || "".equals(content) || content.length() < 1) {
                    return null;
                }
                Hashtable<EncodeHintType, String> hints = new Hashtable<EncodeHintType, String>();
                hints.put(EncodeHintType.CHARACTER_SET, "utf-8");
                // 图像数据转换,使用了矩阵转换
                BitMatrix bitMatrix = new QRCodeWriter().encode(content,
                        BarcodeFormat.QR_CODE, width, height, hints);
                int[] pixels = new int[width * height];
                // 下面这里按照二维码的算法,逐个生成二维码的图片,
                // 两个for循环是图片横列扫描的结果
                for (int y = 0; y < height; y++) {
                    for (int x = 0; x < width; x++) {
                        if (bitMatrix.get(x, y)) {
                            pixels[y * width + x] = 0xff000000;
                        } else {
                            pixels[y * width + x] = 0xffffffff;
                        }
                    }
                }
                // 生成二维码图片的格式,使用ARGB_8888
                Bitmap bitmap = Bitmap.createBitmap(width, height,
                        Bitmap.Config.ARGB_8888);
                bitmap.setPixels(pixels, 0, width, 0, 0, width, height);
                return bitmap;
            } catch (WriterException e) {
                e.printStackTrace();
            }
            return null;
        }
    
        /**
         * 生成条形码
         *
         * @param context
         * @param contents
         *            需要生成的内容
         * @param desiredWidth
         *            生成条形码的宽带
         * @param desiredHeight
         *            生成条形码的高度
         * @param displayCode
         *            是否在条形码下方显示内容
         * @return
         */
        public static Bitmap creatBarcode(Context context, String contents,
                                          int desiredWidth, int desiredHeight, boolean displayCode) {
            Bitmap ruseltBitmap = null;
            /**
             * 图片两端所保留的空白的宽度
             */
            int marginW = 20;
            /**
             * 条形码的编码类型
             */
            BarcodeFormat barcodeFormat = BarcodeFormat.CODE_128;
    
            if (displayCode) {
                Bitmap barcodeBitmap = encodeAsBitmap(contents, barcodeFormat,
                        desiredWidth, desiredHeight);
                Bitmap codeBitmap = creatCodeBitmap(contents, desiredWidth + 2
                        * marginW, desiredHeight, context);
                ruseltBitmap = mixtureBitmap(barcodeBitmap, codeBitmap, new PointF(
                        0, desiredHeight));
            } else {
                ruseltBitmap = encodeAsBitmap(contents, barcodeFormat,
                        desiredWidth, desiredHeight);
            }
    
            return ruseltBitmap;
        }
    
        /**
         * 生成条形码的Bitmap
         *
         * @param contents
         *            需要生成的内容
         * @param format
         *            编码格式
         * @param desiredWidth
         * @param desiredHeight
         * @return
         * @throws WriterException
         */
        protected static Bitmap encodeAsBitmap(String contents,
                                               BarcodeFormat format, int desiredWidth, int desiredHeight) {
            final int WHITE = 0xFFFFFFFF;
            final int BLACK = 0xFF000000;
    
            MultiFormatWriter writer = new MultiFormatWriter();
            BitMatrix result = null;
            try {
                result = writer.encode(contents, format, desiredWidth,
                        desiredHeight, null);
            } catch (WriterException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
    
            int width = result.getWidth();
            int height = result.getHeight();
            int[] pixels = new int[width * height];
            // All are 0, or black, by default
            for (int y = 0; y < height; y++) {
                int offset = y * width;
                for (int x = 0; x < width; x++) {
                    pixels[offset + x] = result.get(x, y) ? BLACK : WHITE;
                }
            }
    
            Bitmap bitmap = Bitmap.createBitmap(width, height,
                    Bitmap.Config.ARGB_8888);
            bitmap.setPixels(pixels, 0, width, 0, 0, width, height);
            return bitmap;
        }
    
        /**
         * 生成显示编码的Bitmap
         *
         * @param contents
         * @param width
         * @param height
         * @param context
         * @return
         */
        protected static Bitmap creatCodeBitmap(String contents, int width,
                                                int height, Context context) {
            TextView tv = new TextView(context);
            LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(
                    LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT);
            tv.setLayoutParams(layoutParams);
            tv.setText(contents);
            tv.setHeight(height);
            tv.setGravity(Gravity.CENTER_HORIZONTAL);
            tv.setWidth(width);
            tv.setDrawingCacheEnabled(true);
            tv.setTextColor(Color.BLACK);
            tv.measure(View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED),
                    View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED));
            tv.layout(0, 0, tv.getMeasuredWidth(), tv.getMeasuredHeight());
    
            tv.buildDrawingCache();
            Bitmap bitmapCode = tv.getDrawingCache();
            return bitmapCode;
        }
    
        /**
         * 将两个Bitmap合并成一个
         *
         * @param first
         * @param second
         * @param fromPoint
         *            第二个Bitmap开始绘制的起始位置(相对于第一个Bitmap)
         * @return
         */
        protected static Bitmap mixtureBitmap(Bitmap first, Bitmap second,
                                              PointF fromPoint) {
            if (first == null || second == null || fromPoint == null) {
                return null;
            }
            int marginW = 20;
            Bitmap newBitmap = Bitmap.createBitmap(
                    first.getWidth() + second.getWidth() + marginW,
                    first.getHeight() + second.getHeight(), Bitmap.Config.ARGB_4444);
            Canvas cv = new Canvas(newBitmap);
            cv.drawBitmap(first, marginW, 0, null);
            cv.drawBitmap(second, fromPoint.x, fromPoint.y, null);
            cv.save();
            cv.restore();
    
            return newBitmap;
        }
    
    }
    

    调用:

    ZXingUtils.createQRImage("12345678", 400, 400)

     

    扫描二维码demo下载地址:

    下载

    展开全文
  • 这是微光互联扫码器Z100的资料,包含官方文档和例程、工具
  • 二维码扫描 图像识别

    2017-11-14 11:11:33
    项目会用到图像识别 ,主要是二维码扫描的谷歌原生jar包
  • 可以通过电脑扫描、识别二维码。需要.NET4.5以上支持!
  • Android 二维码扫描工具 QRCodeReaderView

    千次阅读 2016-05-21 10:42:14
    QRCodeReaderView 是基于 ZXING 条形码扫描工具项目改进,为了在肖像模式和增强现实目的下进行更简单的 Android 二维码检测。此项目可以在相机的预览中显示是否有二维码。  用法: Create an Activity which ...
  • 要生成二维码需要使用zxing.unity.dll提取码syq1在unity中创建Plugins文件夹,将dll放入此文件夹中我这里使用的unity版本是2019.4.32。

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 47,075
精华内容 18,830
关键字:

二维码扫描工具