HTML5混合开发⼆维码扫描以及调⽤本地摄像头
今天主管给了我个需求,说要⽤混合开发,⽤H5调⽤本地摄像头进⾏扫描⼆维码,我之前有做过原⽣安卓的⼆维码扫⼀扫,主要是通过调⽤zxing插件进⾏操作的,其中还弄了个闪光灯.但是纯H5的没接触过,⼼⾥没底,于是晚上回家开始⽹上各处⽅案.以下是我对于H5扫描⼆维码以及调⽤本地摄像头的理解以及代码.
科普⽹址:
H5如何⽣成安卓组件对象
H5调⽤安卓本地摄像头api
在线⼆维码图⽚⽣成器
⼆维码扫描:(使⽤的是mui的框架,下⾯是html代码)
<!doctype html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
<meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no" />
<link href="css/mui.min.css" rel="stylesheet" />
<script src="js/mui.min.js"></script>
<style type="text/css">
#bcid{
width: 100%;
height: 100%;
position: absolute;
background: #000000;
}
html, body ,div{
height:100%;
width: 100%;
}
.fbt{
color: #0E76E1;
width: 50%;
background-color: #ffffff;
float: left;
line-height: 44px;
text-align: center;
}
</style>
</head>
<body>
<header class="mui-bar mui-bar-nav" >
<a class="mui-action-back mui-icon mui-icon-left-nav mui-pull-left"></a>
<h1 class="mui-title" >H5webapp⼆维码扫描</h1>
<span class="mui-icon mui-icon-spinner-cycle mui-spin mui-pull-right" id="turnTheLight"></span>
</header>
<div id="bcid">
<!--盛放扫描控件的div-->
</div>
<div class="mui-bar mui-bar-footer" >
<div class="fbt" onclick="scanPicture();">从相册选择⼆维码</div>
<div class="fbt mui-action-back">取 消</div>
</div>
<script type="text/javascript">
var height = window.innerHeight + 'px';//获取页⾯实际⾼度
var width = window.innerWidth + 'px';
scan = null;//扫描对象
mui.plusReady(function () { //通过mui初始化扫描
mui.init();
startRecognize();
});
function startRecognize(){ //开启扫描
try{
var filter;
//⾃定义的扫描控件样式
var styles = {frameColor: "#29E52C",scanbarColor: "#29E52C",background: ""}
/
/扫描控件构造
scan = new plus.barcode.Barcode('bcid',filter,styles);
scan.start();
//打开关闭闪光灯处理
var flag = false;
if(flag == false){
scan.setFlash(true);
flag = true;
}else{
scan.setFlash(false);
flag = false;
}
});
}catch(e){
alert("出现错误啦:\n"+e);
}
};
function onerror(e){ //错误弹框
alert(e);
};
function onmarked( type, result ) { //这个是扫描⼆维码的回调函数,type是扫描⼆维码回调的类型 var text = '';
switch(type){ //QR,EAN13,EAN8都是⼆维码的⼀种编码格式,result是返回的结果
case plus.barcode.QR:
text = 'QR: ';
break;
case plus.barcode.EAN13:
text = 'EAN13: ';
break;
case plus.barcode.EAN8:
text = 'EAN8: ';
break;
}
alert( text + " : "+ result );
};
// 从相册中选择⼆维码图⽚
function scanPicture() { //可以直接识别⼆维码图⽚
plus.gallery.pick(function(path){
plus.barcode.scan(path,onmarked,function(error){
plus.nativeUI.alert( "⽆法识别此图⽚" );
});
},function(err){
plus.nativeUI.alert("Failed: "+ssage);
});
}
</script>
</body>
</html>
下⾯是包结构:开发⼯具是hbuilder
mui.plusReady函数主要是初始化作⽤
startRecognize()是开启扫描⼆维码的功能
onerror是错误提⽰
onmarked是重点,是⼆维码扫描后的回调函数,type是⼆维码识别类型,result是⼆维码回调的内容scanPicture()可以直接识别本地的⼆维码图⽚并进⾏解析
H5调⽤本地摄像头
mui框架常用组件有哪些<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no" /> <title></title>
<script src="js/mui.min.js"></script>
<link href="css/mui.min.css" rel="stylesheet"/>
<script type="text/javascript" charset="utf-8">
document.addEventListener( "plusready", function(){
mui.init();
});
function getCamera(){
var cam = Camera();
//字符串数组,摄像头⽀持的拍照分辨率
var Resolutions = cam.supportedImageResolutions[0];
//字符串数组,摄像头⽀持的拍照⽂件格式
var Formats = cam.supportedImageFormats[0];
/
/调⽤拍照⽅法
//capturedFile,拍照完成后,照⽚的存放地址
cam.captureImage(function(capturedfile){
//拍照成功
alert(capturedfile);//打印⼀下
},function(){
//拍照失败
},{
//拍照参数
format : Formats,
index : 1//1表⽰主摄像头,2表⽰辅摄像头
});
var Resolutions = cam.supportedImageResolutions[0];
//字符串数组,摄像头⽀持的拍照⽂件格式
var Formats = cam.supportedImageFormats[0];
//调⽤拍照⽅法
//capturedFile,拍照完成后,照⽚的存放地址
cam.captureImage(function(capturedFile){
//拍照成功
alert(capturedFile);//打印⼀下
//调⽤系统⽅法,根据照⽚地址获取照⽚
solvLocalFileSystemURL(capturedFile,
/
/成功的回调函数
//entry⽂件的相关信息
function(entry){
var img = ateElement("img");
img.src = LocalURL();
document.documentElement.appendChild(img);
},function(){
//失败的回调函数
});
});
}
</script>
</head>
<body>
<button onclick="getCamera()">照相</button>
</body>
</html>
mui.init();是mui框架初始化
getCamera()⽅法是先⽣成camera对象,然后进⾏拍照,拍照完把图⽚⽣成图⽚路径打印出来
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论