html5移动端页面上调用手机摄像头扫描二维码并获取二维码信息代码?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了html5移动端页面上调用手机摄像头扫描二维码并获取二维码信息代码?相关的知识,希望对你有一定的参考价值。

html5移动端调用手机摄像头扫描二维码并获取二维码信息代码如下:

[html] view plain copy

<!DOCTYPE html>  

<html><head>  

<title>HTML5 code Reader</title>  

<meta http-equiv="Content-Type" content="text/html; charset=gb2312">  

</head>  

<style type="text/css">  

html, body  height: 100%; width: 100%; text-align:center;     

</style>  

<script src="jquery-1.9.1.js"></script>  

<script>  

//这段代 主要是获取摄像头的视频流并显示在Video 签中    

var canvas=null,context=null,video=null;     

window.addEventListener("DOMContentLoaded", function ()  

  

try  

canvas = document.getElementById("canvas");  

context = canvas.getContext("2d");  

video = document.getElementById("video");  

var videoObj =  "video": true,audio:false,  

flag=true,  

MediaErr = function (error)  

             

flag=false;    

if (error.PERMISSION_DENIED)  

  

alert('用户拒绝了浏览器请求媒体的权限', '提示');  

 else if (error.NOT_SUPPORTED_ERROR)   

alert('对不起,您的浏览器不支持拍照功能,请使用其他浏览器', '提示');  

 else if (error.MANDATORY_UNSATISFIED_ERROR)   

alert('指定的媒体类型未接收到媒体流', '提示');  

 else   

alert('系统未能获取到摄像头,请确保摄像头已正确安装。或尝试刷新页面,重试', '提示');  

  

;  

//获取媒体的兼容代码,目前只支持(Firefox,Chrome,Opera)  

if (navigator.getUserMedia)  

  

//qq浏览器不支持  

if (navigator.userAgent.indexOf('MQQBrowser') > -1)   

alert('对不起,您的浏览器不支持拍照功能,请使用其他浏览器', '提示');  

return false;  

  

navigator.getUserMedia(videoObj, function (stream)   

video.src = stream;                  

video.play();        

, MediaErr);             

  

else if(navigator.webkitGetUserMedia)  

  

navigator.webkitGetUserMedia(videoObj, function (stream)  

            

video.src = window.webkitURL.createObjectURL(stream);             

video.play();             

, MediaErr);             

  

else if (navigator.mozGetUserMedia)  

  

navigator.mozGetUserMedia(videoObj, function (stream)   

video.src = window.URL.createObjectURL(stream);  

video.play();  

, MediaErr);  

  

else if (navigator.msGetUserMedia)  

   

navigator.msGetUserMedia(videoObj, function (stream)   

$(document).scrollTop($(window).height());  

video.src = window.URL.createObjectURL(stream);  

video.play();  

, MediaErr);  

else  

alert('对不起,您的浏览器不支持拍照功能,请使用其他浏览器');  

return false;  

  

if(flag)  

alert('为了获得更准确的测试结果,请尽量将二维码置于框中,然后进行拍摄、扫描。 请确保浏览器有权限使用摄像功能');  

  

//这个是拍照按钮的事件,            

$("#snap").click(function () startPat();).show();  

catch(e)        

printHtml("浏览器不支持HTML5 CANVAS");         

   

, false);  

//打印内容到页面        

function printHtml(content)  

$(window.document.body).append(content+"<br/>");  

  

//开始拍照  

function startPat()  

setTimeout(function()//防止调用过快  

if(context)  

  

context.drawImage(video, 0, 0, 320, 320);       

CatchCode();   

  

,200);  

   

//抓屏获取图像流,并上传到服务器        

function CatchCode()           

if(canvas!=null)  

    

//以下开始编 数据     

var imgData = canvas.toDataURL();   

//将图像转换为base64数据  

var base64Data = imgData;//.substr(22); //在前端截取22位之后的字符串作为图像数据  

//开始异步上  

$.post("saveimg.php",  "img": base64Data ,function (result)  

     

printHtml("解析结果:"+result.data);  

if (result.status == "success" && result.data!="")  

                   

printHtml("解析结果成功!");  

else    

startPat();//如果没有解析出来则重新抓拍解析         

  

,"json");  

  

        

</script>  

<body>  

<div id="support"></div>  

<div id="contentHolder">         

<video id="video" width="320" height="320" autoplay>  

</video>         

<canvas style="display:none; background-color:#F00;" id="canvas" width="320" height="320">  

</canvas> <br/>  

<button id="snap" style="display:none; height:50px; width:120px;">开始扫描</button>    

</div>  

</body></html>  

参考技术A 首先感谢 jsqrcode 的开发者,提供这么优秀的解析二维码的代码,为我减少了很大的工作量。jsqrcode 地址 百度
我的代码库地址百度
1.解决的问题:
1.能够在微博客户端呼起摄像头扫描二维码并且解析;
2.能够在原生浏览器和微信客户端中扫描二维码并且解析;
2.优点:
web端或者是 h5端可以直接完成扫码的工作;
3.缺点:
图片不清晰很容易解析失败(拍照扫描图片需要镜头离二维码的距离很近),相对于 native 呼起的摄像头解析会有1-2秒的延时。
说明:
此插件需要配合zepto.js 或者 jQuery.js使用
使用方法:
1.在需要使用的页面按照下面顺序引入lib目录下的 js 文件

复制代码
代码如下:

<script src="lib/zepto.js"></script>
<script src="lib/qrcode.lib.min.js"></script>
<script src="lib/qrcode.js"></script>

2.自定义按钮的 html 样式
因为该插件需要使用<input type="file" /> ,该 html 结构在网页上面是有固定的显示样式,为了能够自定义按钮样式,我们可以按照下面的示例代码结构嵌套代码

复制代码
代码如下:

<div class="qr-btn" node-type="jsbridge">扫描二维码1
<input node-type="jsbridge" type="file" name="myPhoto" value="扫描二维码1" />
</div>

然后设置 input 按钮的 css 隐藏按钮,比如我使用的是属性选择器

复制代码
代码如下:

input[node-type=jsbridge]
visibility: hidden;


这里我们只需要按照自己的需要定义class="qr-btn"的样式即可。
3.在页面上初始化 Qrcode 对象

复制代码
代码如下:

//初始化扫描二维码按钮,传入自定义的 node-type 属性
$(function()
Qrcode.init($('[node-type=jsbridge]'));
);

主要代码解析

复制代码
代码如下:

(function($)
var Qrcode = function(tempBtn)
//该对象只支持微博域下的解析,也就是说不是微博域下的页面只能用第二种方案解析二维码
if (window.WeiboJSBridge)
$(tempBtn).on('click', this.weiBoBridge);
else
$(tempBtn).on('change', this.getImgFile);

;
Qrcode.prototype =
weiBoBridge: function()
WeiboJSBridge.invoke('scanQRCode', null, function(params)
//得到扫码的结果
location.href=params.result;
);
,
getImgFile: function()
var _this_ = this;
var imgFile = $(this)[0].files;
var oFile = imgFile[0];
var oFReader = new FileReader();
var rFilter = /^(?:image\/bmp|image\/cis\-cod|image\/gif|image\/ief|image\/jpeg|image\/jpeg|image\/jpeg|image\/pipeg|image\/png|image\/svg\+xml|image\/tiff|image\/x\-cmu\-raster|image\/x\-cmx|image\/x\-icon|image\/x\-portable\-anymap|image\/x\-portable\-bitmap|image\/x\-portable\-graymap|image\/x\-portable\-pixmap|image\/x\-rgb|image\/x\-xbitmap|image\/x\-xpixmap|image\/x\-xwindowdump)$/i;
if (imgFile.length === 0)
return;

if (!rFilter.test(oFile.type))
alert("选择正确的图片格式!");
return;

//读取图片成功后执行的代码
oFReader.onload = function(oFREvent)
qrcode.decode(oFREvent.target.result);
qrcode.callback = function(data)
//得到扫码的结果
location.href = data;
;
;
oFReader.readAsDataURL(oFile);
,
destory: function()
$(tempBtn).off('click');

;
//初始化
Qrcode.init = function(tempBtn)
var _this_ = this;
var inputDom;
tempBtn.each(function()
new _this_($(this));
);
$('[node-type=qr-btn]').on('click', function()
$(this).find('[node-type=jsbridge]')[0].click();
);
;
window.Qrcode = Qrcode;
)(window.Zepto ? Zepto : jQuery);

.net 手机扫描二维码功能

流程
1、打开手机网页,网页上存在两个内容,一个是一个文本框,一个是按钮。
2、点击按钮,打开扫描功能,去扫条形码或二维码。
3、把扫描到的信息反馈回文本框中。

我想知道怎么实现第二步和第三步。求救。。。

参考技术A 下载个二维码软件就行,所有的都行追问

我是要通过点击页面上的按钮去扫描,而不是打开手机上的软件去扫描。

追答

的有识别的软件,你不带鼻子光知道这是吃的,你知道什么味道呢

参考技术B 网页是很难实现的。
一般用于APP开发。HTML5里面可以调用JAVA端扫描接口。但是解析数据还是需要自己处理。追问

我不是想做app,我想做网页来的。
解析数据这个不是问题,主要是怎么通过点击按钮让手机去扫描想要的二维码。

追答

不好意思哦,我暂时没有解决办法。
不过我可以提供一个解决思路,可以使用flash试试看。

本回答被提问者和网友采纳

以上是关于html5移动端页面上调用手机摄像头扫描二维码并获取二维码信息代码?的主要内容,如果未能解决你的问题,请参考以下文章

html5怎么扫描二维码

手机怎么扫描摄像头?

使用vue做移动app时,调用摄像头扫描二维码

html5怎么做扫描二维码的功能

手机web页面怎么调用摄像头执行扫描,获取数据?

html5或者JS怎样调用手机摄像头或者相册?