吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 2091|回复: 1
收起左侧

[会员申请] 申请会员ID:lingsui

[复制链接]
吾爱游客  发表于 2021-1-21 09:15
1、申 请 I D:lingsui
2、个人邮箱:Service@52pojie.cn
3、原创技术文章:
使用H5模仿微信扫一扫付款功能

经过一系列的查找最后发现可以使用 JS调用手机摄像头然后用画布把当前摄像头的数据转成Base64的png图片,经过QrCode直接再本地识别。
优点:
兼容大多数浏览器
本地识别不占用服务端资源
代码比较简单只有一个页面
[XHTML] 纯文本查看 复制代码
<html lang="ZH-CN">
<head>
  <meta charset="utf-8">
  <title>Web QrCode Test</title>
<script type="text/javascript" src="jquery-1.8.3.min.js"></script>
 
<script type="text/javascript" src="jsqrcode/src/grid.js"></script>
<script type="text/javascript" src="jsqrcode/src/version.js"></script>
<script type="text/javascript" src="jsqrcode/src/detector.js"></script>
<script type="text/javascript" src="jsqrcode/src/formatinf.js"></script>
<script type="text/javascript" src="jsqrcode/src/errorlevel.js"></script>
<script type="text/javascript" src="jsqrcode/src/bitmat.js"></script>
<script type="text/javascript" src="jsqrcode/src/datablock.js"></script>
<script type="text/javascript" src="jsqrcode/src/bmparser.js"></script>
<script type="text/javascript" src="jsqrcode/src/datamask.js"></script>
<script type="text/javascript" src="jsqrcode/src/rsdecoder.js"></script>
<script type="text/javascript" src="jsqrcode/src/gf256poly.js"></script>
<script type="text/javascript" src="jsqrcode/src/gf256.js"></script>
<script type="text/javascript" src="jsqrcode/src/decoder.js"></script>
<script type="text/javascript" src="jsqrcode/src/qrcode.js"></script>
<script type="text/javascript" src="jsqrcode/src/findpat.js"></script>
<script type="text/javascript" src="jsqrcode/src/alignpat.js"></script>
<script type="text/javascript" src="jsqrcode/src/databr.js"></script>
</head>
<body>
  <div class="booth">
    <video id="video" width="400" height="400"></video>
    <canvas id='canvas' width='400' height='400'></canvas>
    <img id='img' src=''>
  </div>
  
  <div id="mmm"></div>
  
  <canvas id="qr-canvas" width="640" height="480"></canvas>
<script>
    
    
    //初始化媒体对象
  	var c=0;
    var video = document.getElementById('video'),
        canvas = document.getElementById('canvas'),
        img = document.getElementById('img'),
        vendorUrl = window.URL || window.webkitURL;
        
    //媒体对象
    navigator.getMedia = navigator.getUserMedia ||
                         navagator.webkitGetUserMedia ||
                         navigator.mozGetUserMedia ||
                         navigator.msGetUserMedia;
    navigator.getMedia({
        video: true, //使用摄像头对象
        audio: false  //不适用音频
    }, function(strem){
        console.log(strem);
        video.src = vendorUrl.createObjectURL(strem);
        video.play();
    }, function(error) {
        //error.code
        console.log(error);
    });
    
    //启动定时器
    setTimeout("actionP(null)","1000");
    
    //定时器
    function actionP(data){
    	if(data==null){
    		Screenshot()
        	
    	}else{
    		if(data!=null & data!="error decoding QR Code"){//识别出数据
        		if(data.indexOf("http")!=-1){
        			window.location.href=data;
        		}else alert(data);
        		
        	}else{//没有数据循环十次
           		c++;
               	if(c<10){
               		setTimeout("actionP(null)","1000");
               	}
            	
            }
    	}
    	
   	}
    
    
    function Screenshot(){//截取图像
 		 canvas.getContext('2d').drawImage(video, 0, 0, 400, 400);
 		 var imgData = canvas.toDataURL("image/png");
 		 load(imgData);
 		 img.src=imgData;
    	
    }
   //识别二维码
	function dragenter(e) {
	  e.stopPropagation();
	  e.preventDefault();
	}
	
	function dragover(e) {
	  e.stopPropagation();
	  e.preventDefault();
	}
	function drop(e) {
	  e.stopPropagation();
	  e.preventDefault();
	
	  var dt = e.dataTransfer;
	  var files = dt.files;
	
	
	}
	
		
	function load(name)
	{
		initCanvas(640,480);
		//识别二维码并回调方法
		qrcode.callback = actionP;
		qrcode.decode(name);
	}
	
	function initCanvas(ww,hh)//创建画板
		{
		gCanvas = document.getElementById("qr-canvas");
		gCanvas.addEventListener("dragenter", dragenter, false);  
		gCanvas.addEventListener("dragover", dragover, false);  
		gCanvas.addEventListener("drop", drop, false);
		var w = ww;
		var h = hh;
		gCanvas.style.width = w + "px";
		gCanvas.style.height = h + "px";
		gCanvas.width = w;
		gCanvas.height = h;
		gCtx = gCanvas.getContext("2d");
		gCtx.clearRect(0, 0, w, h);
		imageData = gCtx.getImageData( 0,0,320,240);
	}
 
 
  </script>
</body>
</html>

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

Hmily 发表于 2021-1-25 13:13
抱歉,未能达到申请要求,申请不通过,可以关注论坛官方微信(吾爱破解论坛),等待开放注册通知。
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-24 10:26

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表