H5混合开发二维码扫描以及调用本地摄像头

今天主管给了我个需求,说要用混合开发,用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" style="">
      <a class="mui-action-back mui-icon mui-icon-left-nav mui-pull-left"></a>
      <h1 class="mui-title" style="color: #0E76E1;">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" style="padding: 0px;">
        <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‘;
    document.getElementById("bcid").style.height= height;
    document.getElementById("bcid").style.width= width;  

           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.onmarked = onmarked;
            scan.onerror = onerror;  //扫描错误
            scan.start();
            //打开关闭闪光灯处理
            var flag = false;
            document.getElementById("turnTheLight").addEventListener(‘tap‘,function(){
               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: "+err.message);
            });
        }         

        </script>
    </body>
</html>

下面是包结构:开发工具是hbuilder

image.png

image.png

image.png

mui.plusReady函数主要是初始化作用

startRecognize()是开启扫描二维码的功能

onerror是错误提示

onmarked是重点,是二维码扫描后的回调函数,type是二维码识别类型,result是二维码回调的内容

scanPicture()可以直接识别本地的二维码图片并进行解析

H5调用本地摄像头

<!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 = plus.camera.getCamera();
            //字符串数组,摄像头支持的拍照分辨率
            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);//打印一下
                //调用系统方法,根据照片地址获取照片
                plus.io.resolvLocalFileSystemURL(capturedFile,
                    //成功的回调函数
                    //entry文件的相关信息
                    function(entry){
                        var img = document.createElement("img");
                        img.src = entry.toLocalURL();
                        document.documentElement.appendChild(img);
                    },function(){
                        //失败的回调函数
                    });
            });
        }
    </script>
</head>
<body>
    <button onclick="getCamera()">照相</button>
</body>
</html>

mui.init();是mui框架初始化

getCamera()方法是先生成camera对象,然后进行拍照,拍照完把图片生成图片路径打印出来

image.png


作者:听风_与你链接:http://www.jianshu.com/p/c952b3a5e1d2來源:简书著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
时间: 2024-07-29 19:21:53

H5混合开发二维码扫描以及调用本地摄像头的相关文章

iOS开发-二维码扫描和应用跳转

iOS开发-二维码扫描和应用跳转 序言 前面我们已经调到过怎么制作二维码,在我们能够生成二维码之后,如何对二维码进行扫描呢? 在iOS7之前,大部分应用中使用的二维码扫描是第三方的扫描框架,例如ZXing或者ZBar.使用时集成麻烦,出错也不方便调试.在iOS7之后,苹果自身提供了二维码的扫描功能,从效率上来说,原生的二维码远高于这些第三方框架.本文讲解如何使用原生框架实现二维码扫描功能,并且进行扫描后的项目跳转.ps:本期的源代码会在文章结尾给出链接 扫描相关类 二维码扫描需要获取摄像头并读取

swift编程语言简单开发二维码扫描

最近在学习swift编程语言(http://www.maiziedu.com/course/ios/16-161/), 在看视频学习swift编程语言时,发现有个二维码扫面案例的教程,非常的不错,其中还有一些动画的实现 ,今天就先记录一下二维码扫描的简单实现  不太好记手写一遍 学习的基础在于模仿嘛 创建一个实现二维码扫描的步骤 1.首先是懒加载创建 会话 输入设备  输出设备 // 先倒入框架 AVFoundation 2.    import AVFoundation 3.    //通过懒

Android开发--二维码开发应用(转载!)

android项目开发 二维码扫描   基于android平台的二维码扫描项目,可以查看结果并且链接网址 工具/原料 zxing eclipse 方法/步骤 首先需要用到google提供的zxing和core.jar文件,可以在csdn上下载   解压zxing,并将android文件夹作为项目导入到eclipse中   打开文件列表,在libs文件中导入core.jar,并修改掉部分报错的地方(都是小问题,按照提示修改就行)   项目在这个时候就可以运行了,效果如图所示(在这之前我已经对界面进

ZBar 是款桌面电脑用条形码/二维码扫描工具

windows平台python 2.7环境编译安装zbar 最近一个项目需要识别二维码,找来找去找到了zbar和zxing,中间越过无数坑,总算基本上弄明白,分享出来给大家. 一.zbar官方介绍 ZBar 是款桌面电脑用条形码/二维码扫描工具,支持摄像头及图片扫描,支持多平台,例如 iPhone,Andriod 手机,同时 ZBar封装了二维码扫描的 API 开发包. ZBar 目前条码类型有:EAN-13/UPC-A, UPC-E, EAN-8, Code 128, Code 39, Int

Qt之二维码扫描

简述 二维码(QR Code)是用某种特定的几何图形按一定规律在平面(二维方向)分布的黑白相间的图形记录数据符号信息的.是所有信息数据的一把钥匙.应用十分广泛,如:产品防伪/溯源.广告推送.网站链接.数据下载.商品交易.定位/导航.电子凭证.车辆管理.信息传递.名片交流.wifi共享等. 二维条码常用的码制: Data Matrix.MaxiCode.Aztec.QR Code.Vericode.PDF417.Ultracode.Code 49.Code 16K等. 简述 二维码与一维码 二维码

iOS开发之二维码扫描

p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 18.0px "PingFang SC"; color: #1e9421 } span.s1 { } 二维码扫描 01-导入系统库 02 新建继承自UIView的 p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 18.0px Menlo; color: #000000 } span.s1 { } LHQPreView 2.1导入系统库头文件 p.p1

(转载)《打造极致二维码扫描系列》 -- ZXing开发详解

什么是ZXing? 在Android平台做过二维码相关模块的肯定都熟知ZXing开源项目,ZXing是一个开源Java类库用于解析多种格式的1D/2D条形码.目标是能够对QR编码.Data Matrix.UPC的1D条形码进行解码. 其提供了多种平台下的客户端包括:J2ME.J2SE和Android.其GitHub地址是: https://github.com/zxing/zxing ZXing项目里面代码很多,实现的功能也很多,我们的应用只需要剥离其中的扫描模块即可,再多一点也就是生成二维码的

android开发记录2 webview调用二维码扫描

因为公司项目需求,需要调用二维码扫描 参考:https://blog.csdn.net/advance_djj/article/details/78989139 https://download.csdn.net/download/advance_djj/10191720 build.gradle 文件里的 dependencies 节点下加入如下依赖 compile 'com.google.zxing:core:3.3.0' 原文地址:https://www.cnblogs.com/kinom

关于微信网页/H5游戏开发中二维码无法识别的解决方法

我接触微信H5开发已经有一年多了,做过很多案例也遇到很多的问题.今天我把困扰我半年之久的问题分享出来,也就是关于微信网页/H5游戏开发中二维码无法识别的解决方法. 我在百度搜索了许久,关于微信H5网页/游戏开发问题以及解决方案的相关文章少之又少,在相关前端交流群中问别人,一问三不知,平时这些群就会上班吹牛逼,真正交流问题的人少又少,真是揪心啊,最后还是得靠自己解决了. [这里,我先举个栗子] 上面这个页面,相信从事微信H5开发的人应该很熟悉,就是常见的分享到朋友圈的页面,通常以[引导分享图标]+