JS调用安卓手机摄像头扫描二维码


Posted in Javascript onOctober 16, 2018

项目要求:

使用H5模仿微信扫一扫付款功能

经过一系列的查找最后发现可以使用 JS调用手机摄像头然后用画布把当前摄像头的数据转成Base64的png图片,经过QrCode直接再本地识别。

优点:

兼容大多数浏览器

本地识别不占用服务端资源

代码比较简单只有一个页面

<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>

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
JavaScript高级程序设计 客户端存储学习笔记
Sep 10 Javascript
JavaScript中的变量作用域介绍
Dec 31 Javascript
javascript中setAttribute兼容性用法分析
Dec 12 Javascript
获取JavaScript异步函数的返回值
Dec 21 Javascript
JS正则表达式修饰符global(/g)用法分析
Dec 27 Javascript
Javascript Function.prototype.bind详细分析
Dec 29 Javascript
基于jQuery实现数字滚动效果
Jan 16 Javascript
vue按需加载组件webpack require.ensure的方法
Dec 13 Javascript
详解Vue打包优化之code spliting
Apr 09 Javascript
简述vue路由打开一个新的窗口的方法
Nov 29 Javascript
在Vue中使用CSS3实现内容无缝滚动的示例代码
Nov 27 Vue.js
vue中实现点击空白区域关闭弹窗的两种方法
Dec 30 Vue.js
QRCode.js二维码生成并能长按识别
Oct 16 #Javascript
移动端图片上传旋转、压缩问题的方法
Oct 16 #Javascript
JavaScript实现表单注册、表单验证、运算符功能
Oct 15 #Javascript
从零开始搭建vue移动端项目到上线的步骤
Oct 15 #Javascript
jQuery轻量级表单模型验证插件
Oct 15 #jQuery
详解ESLint在Vue中的使用小结
Oct 15 #Javascript
手淘flexible.js框架使用和源代码讲解小结
Oct 15 #Javascript
You might like
四月新番又没了,《Re:从零开始的异世界生活》第二季延期至7月播出
2020/05/06 日漫
深入理解:XML与对象的序列化与反序列化
2013/06/08 PHP
zf框架的registry(注册表)使用示例
2014/03/13 PHP
PHP论坛实现积分系统的思路代码详解
2020/06/01 PHP
PHP isset()及empty()用法区别详解
2020/08/29 PHP
轻轻松松学习JavaScript
2007/02/25 Javascript
clipboard.js无需Flash无需依赖任何JS库实现文本复制与剪切
2015/10/10 Javascript
jQuery插件扩展测试实例
2016/06/21 Javascript
基于JavaScript实现点击页面任何位置返回
2016/08/31 Javascript
浅谈JS使用[ ]来访问对象属性
2016/09/21 Javascript
微信小程序模板之分页滑动栏
2017/02/10 Javascript
webpack源码之loader机制详解
2018/04/06 Javascript
JavaScript实现创建自定义对象的常用方式总结
2018/07/09 Javascript
JS使用百度地图API自动获取地址和经纬度操作示例
2019/04/16 Javascript
小程序实现搜索界面 小程序实现推荐搜索列表效果
2019/05/18 Javascript
Angular value与ngValue区别详解
2019/11/27 Javascript
微信小程序搜索框样式并实现跳转到搜索页面(小程序搜索功能)
2020/03/10 Javascript
搭建vscode+vue环境的详细教程
2020/08/31 Javascript
python和pygame实现简单俄罗斯方块游戏
2021/02/19 Python
Python查找文件中包含中文的行方法
2018/12/19 Python
详解Python3中setuptools、Pip安装教程
2019/06/18 Python
python flask框架实现重定向功能示例
2019/07/02 Python
pandas计算最大连续间隔的方法
2019/07/04 Python
Python Django Vue 项目创建过程详解
2019/07/29 Python
从训练好的tensorflow模型中打印训练变量实例
2020/01/20 Python
如何用python批量调整视频声音
2020/12/22 Python
CSS3 2D模拟实现摩天轮旋转效果
2016/11/16 HTML / CSS
CSS3 仿微信聊天小气泡实例代码
2017/04/05 HTML / CSS
html5实现完美兼容各大浏览器的播放器
2014/12/26 HTML / CSS
旅游管理本科生求职信
2013/10/14 职场文书
国际金融专业大学生职业生涯规划书
2013/12/28 职场文书
学校政风行风自查自纠报告
2014/10/21 职场文书
2014矛盾纠纷排查调处工作总结
2014/12/09 职场文书
商业计划书如何写?关键问题有哪些?
2019/07/11 职场文书
导游词之广州陈家祠
2019/10/21 职场文书
Python采集壁纸并实现炫轮播
2022/04/30 Python