亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > Java > 正文

java實現電腦端掃描二維碼

2024-07-14 08:42:35
字體:
來源:轉載
供稿:網友

本文實例為大家分享了java實現電腦端掃描二維碼的具體代碼,供大家參考,具體內容如下

說明:js調去電腦攝像頭拍照,然后獲取圖片base64位編碼,再將base64為編碼轉為bolb,通過定時異步上傳到后臺,在后臺對圖片文件進行解碼,返回解碼結果到頁面,然后頁面重新加載結果(url)

第一種方式引入js

<script type="text/javascript" src="${basePath}js/jquery-1.9.min.js"></script><script type="text/javascript" src="${basePath}js/jquery.webcam.min.js"></script>

第二種方式引入js

<script type="text/javascript" src="${basePath}js/jquery-1.9.min.js"></script><!-- 這個應該是需要的 --><script type="text/javascript" src="${basePath}js/jquery.qrcode.min.js"></script>

后臺java代碼maven引入jar包

 <dependency>   <groupId>com.github.binarywang</groupId>   <artifactId>qrcode-utils</artifactId>   <version>1.1</version> </dependency>  <dependency>   <groupId>com.google.zxing</groupId>   <artifactId>core</artifactId>   <version>3.3.3</version> </dependency>

后臺代碼處理方式:

public class EwmDescode {  /**  * 解析二維碼  *   * @param input  *      二維碼輸入流  */ public static final String parse(InputStream input) throws Exception {   Reader reader = null;   BufferedImage image;   try {     image = ImageIO.read(input);     if (image == null) {       throw new Exception("cannot read image from inputstream.");     }     final LuminanceSource source = new BufferedImageLuminanceSource(image);     final BinaryBitmap bitmap = new BinaryBitmap(new HybridBinarizer(source));     final Map<DecodeHintType, String> hints = new HashMap<DecodeHintType, String>();     hints.put(DecodeHintType.CHARACTER_SET, "utf-8");     // 解碼設置編碼方式為:utf-8,     reader = new MultiFormatReader();     return reader.decode(bitmap, hints).getText();   } catch (IOException e) {     e.printStackTrace();     throw new Exception("parse QR code error: ", e);   } catch (ReaderException e) {     e.printStackTrace();     throw new Exception("parse QR code error: ", e);     }   }    /**  * 解析二維碼  *   * @param url  *      二維碼url  */ public static final String parse(URL url) throws Exception {   InputStream in = null;   try {     in = url.openStream();     return parse(in);   } catch (IOException e) {     e.printStackTrace();     throw new Exception("parse QR code error: ", e);     } finally {       IOUtils.closeQuietly(in);     }   }    /**  * 解析二維碼  *   * @param file  *      二維碼圖片文件  */ public static final String parse(File file) throws Exception {   InputStream in = null;   try {     in = new BufferedInputStream(new FileInputStream(file));     return parse(in);   } catch (FileNotFoundException e) {     e.printStackTrace();     throw new Exception("parse QR code error: ", e);     } finally {       IOUtils.closeQuietly(in);     }   }    /**  * 解析二維碼  *   * @param filePath  *      二維碼圖片文件路徑  */ public static final String parse(String filePath) throws Exception {   InputStream in = null;   try {     in = new BufferedInputStream(new FileInputStream(filePath));     return parse(in);   } catch (FileNotFoundException e) {     e.printStackTrace();     throw new Exception("parse QR code error: ", e);   } finally {     IOUtils.closeQuietly(in);   } } }@RequestMapping("/decodeEwm") @ResponseBody public String decodeEwm(MultipartFile ewmImg){ String parse = null; try {  parse = EwmDescode.parse(ewmImg.getInputStream()); } catch (Exception e) {  //e.printStackTrace(); }  String msg = "no"; if(StringUtils.isNotBlank(parse)){  return parse; } return msg; }

前臺jsp代碼:

第一種處理方式:

<%@ page contentType="text/html; charset=utf-8"%><%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%><% String path = request.getContextPath(); String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort()  + path + "/resources/"; String urlPath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort()  + path + "/"; request.setAttribute("path", path); request.setAttribute("basePath", basePath); request.setAttribute("urlPath", urlPath);%><!DOCTYPE html><html>  <head>    <meta charset="utf-8">    <meta http-equiv="X-UA-Compatible" content="IE=edge">    <title>webcam</title>    <style type="text/css">      #webcam {        width: auto;        height: auto;        float: left;      }      #base64image {        display: block;        width: 320px;        height: 240px;      }    </style>     <!-- 基本的jquery引用,1.5版本以上 -->    <script type="text/javascript" src="${basePath}js/jquery-1.9.min.js"></script>     <!-- webcam插件引用 -->    <script type="text/javascript" src="${basePath}js/jquery.webcam.min.js"></script>   </head>   <body>     <div id="webcam"></div>    <canvas id="canvas" width="320" height="240" style="display: none;"></canvas>    <input id="snapBtn" type="button" value="拍照" style="display: none;"/>    <img id="base64image" src='' />     <script type="text/javascript">            $(document).ready(function() {       var pos = 0,         ctx = null,         image = [];       var w = 320;       var h = 240;         jQuery("#webcam").webcam({           width: 320,          height: 240,          mode: "callback",          swffile: "${basePath}js/jscam_canvas_only.swf", // 這里引入swf文件,注意路徑         // swffile: "/jscam_canvas_only.swf", // 這里引入swf文件,注意路徑          onTick: function(remain) {},          onSave: function(data) {             var col = data.split(";");            var img = image;             for(var i = 0; i < 320; i++) {              var tmp = parseInt(col[i]);              img.data[pos + 0] = (tmp >> 16) & 0xff;              img.data[pos + 1] = (tmp >> 8) & 0xff;              img.data[pos + 2] = tmp & 0xff;              img.data[pos + 3] = 0xff;              pos += 4;            }             if(pos >= 4 * 320 * 240) {                          // 將圖片顯示到canvas中              ctx.putImageData(img, 0, 0);              sumitImageFile(canvas.toDataURL("image/png"));              /* // 取得圖片的base64碼              var base64 = canvas.toDataURL("image/png");                        // 將圖片base64碼設置給img              var base64image = document.getElementById('base64image');                                             base64image.setAttribute('src', base64); */               pos = 0;             }           },           onCapture: function() {            webcam.save();            // Show a flash for example          },           debug: function(type, string) {            console.log('type:' + type + ',string:' + string);            // Write debug information to console.log() or a div          },           onLoad: function() {            // Page load          }         });        window.addEventListener("load", function() {           var canvas = document.getElementById("canvas");           if(canvas.getContext) {            ctx = canvas.getContext("2d");            ctx.clearRect(0, 0, 320, 240);             var img = new Image();            img.onload = function() {              ctx.drawImage(img, 129, 89);            }            image = ctx.getImageData(0, 0, 320, 240);          }         }, false);          $('#snapBtn').on('click', function() {          webcam.capture();        });      });            setInterval(function () {       $("#snapBtn").click();      }, 1500);             /**       * @param base64Codes       *      圖片的base64編碼       */      function sumitImageFile(base64Codes){       // var form=document.forms[0];               // var formData = new FormData(form);  //這里連帶form里的其他參數也一起提交了,如果不需要提交其他參數可以直接FormData無參數的構造函數        var formData = new FormData();  //這里連帶form里的其他參數也一起提交了,如果不需要提交其他參數可以直接FormData無參數的構造函數                //convertBase64UrlToBlob函數是將base64編碼轉換為Blob        formData.append("ewmImg",convertBase64UrlToBlob(base64Codes)); //append函數的第一個參數是后臺獲取數據的參數名,和html標簽的input的name屬性功能相同                //ajax 提交form        $.ajax({          url : '${urlPath}query/decodeEwm',          type : "POST",          data : formData,          dataType:"text",          processData : false,     // 告訴jQuery不要去處理發送的數據          contentType : false,    // 告訴jQuery不要去設置Content-Type請求頭                    success:function(data){           //alert(data);           if(data != "no"){            window.location.href=data;           }          },          xhr:function(){      //在jquery函數中直接使用ajax的XMLHttpRequest對象            var xhr = new XMLHttpRequest();                        xhr.upload.addEventListener("progress", function(evt){              if (evt.lengthComputable) {                var percentComplete = Math.round(evt.loaded * 100 / evt.total);                 console.log("正在提交."+percentComplete.toString() + '%');    //在控制臺打印上傳進度              }            }, false);                        return xhr;          }                  });      }       /**       * 將以base64的圖片url數據轉換為Blob       * @param urlData       *      用url方式表示的base64圖片數據       */      function convertBase64UrlToBlob(urlData){                var bytes=window.atob(urlData.split(',')[1]);    //去掉url的頭,并轉換為byte                //處理異常,將ascii碼小于0的轉換為大于0        var ab = new ArrayBuffer(bytes.length);        var ia = new Uint8Array(ab);        for (var i = 0; i < bytes.length; i++) {          ia[i] = bytes.charCodeAt(i);        }         return new Blob( [ab] , {type : 'image/png'});      }          </script>  </body> </html>

第二種處理方式:

<%@ page contentType="text/html; charset=utf-8"%><%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%><% String path = request.getContextPath(); String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort()  + path + "/resources/"; String urlPath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort()  + path + "/"; request.setAttribute("path", path); request.setAttribute("basePath", basePath); request.setAttribute("urlPath", urlPath);%><!DOCTYPE html><html><head><title>QRCODE</title></head><script type="text/javascript" src="${basePath}js/jquery-1.9.min.js"></script><!-- 這個應該是需要的 --><script type="text/javascript" src="${basePath}js/jquery.qrcode.min.js"></script><body><style>#video {display: block;margin:1em auto;width:280px;height:280px;}</style> <video id="video" autoplay></video><script>  window.addEventListener("DOMContentLoaded", function () {    var video = document.getElementById("video"), canvas, context;    try {      canvas = document.createElement("canvas");      context = canvas.getContext("2d");    } catch (e) { alert("not support canvas!"); return; }        navigator.getUserMedia = navigator.getUserMedia || navigator.webkitGetUserMedia || navigator.mozGetUserMedia || navigator.msGetUserMedia;     if (navigator.getUserMedia){      navigator.getUserMedia(        { "video": true },        function (stream) {          if (video.mozSrcObject !== undefined)video.mozSrcObject = stream;          else video.src = ((window.URL || window.webkitURL || window.mozURL || window.msURL) && window.URL.createObjectURL(stream)) || stream;                  video.play();        },        function (error) {          if(error.PERMISSION_DENIED){           alert("用戶拒絕了瀏覽器請求媒體的權限");          }           //console.log("用戶拒絕了瀏覽器請求媒體的權限",error.code);          if(error.NOT_SUPPORTED_ERROR){           alert("當前瀏覽器不支持拍照功能");          }           //console.log("當前瀏覽器不支持拍照功能",error.code);          if(error.MANDATORY_UNSATISFIED_ERROR){           alert("指定的媒體類型未接收到媒體流");          }           //console.log("指定的媒體類型未接收到媒體流",error.code);          alert("Video capture error: " + error.code);        }      );     //定時掃描      setInterval(function () {        context.drawImage(video, 0, 0, canvas.width = video.videoWidth, canvas.height = video.videoHeight);    sumitImageFile(canvas.toDataURL());      }, 1500);    } else {     alert("掃描出錯,換種方式試試!");    }       }, false);      /**   * @param base64Codes   *      圖片的base64編碼   */  function sumitImageFile(base64Codes){   // var form=document.forms[0];       // var formData = new FormData(form);  //這里連帶form里的其他參數也一起提交了,如果不需要提交其他參數可以直接FormData無參數的構造函數    var formData = new FormData();  //這里連帶form里的其他參數也一起提交了,如果不需要提交其他參數可以直接FormData無參數的構造函數        //convertBase64UrlToBlob函數是將base64編碼轉換為Blob    formData.append("ewmImg",convertBase64UrlToBlob(base64Codes)); //append函數的第一個參數是后臺獲取數據的參數名,和html標簽的input的name屬性功能相同        //ajax 提交form    $.ajax({      url : '${urlPath}query/decodeEwm',      type : "POST",      data : formData,      dataType:"text",      processData : false,     // 告訴jQuery不要去處理發送的數據      contentType : false,    // 告訴jQuery不要去設置Content-Type請求頭            success:function(data){       //alert(data);       if(data != "no"){        window.location.href=data;       }      },      xhr:function(){      //在jquery函數中直接使用ajax的XMLHttpRequest對象        var xhr = new XMLHttpRequest();                xhr.upload.addEventListener("progress", function(evt){          if (evt.lengthComputable) {            var percentComplete = Math.round(evt.loaded * 100 / evt.total);             console.log("正在提交."+percentComplete.toString() + '%');    //在控制臺打印上傳進度          }        }, false);                return xhr;      }          });  }   /**   * 將以base64的圖片url數據轉換為Blob   * @param urlData   *      用url方式表示的base64圖片數據   */  function convertBase64UrlToBlob(urlData){        var bytes=window.atob(urlData.split(',')[1]);    //去掉url的頭,并轉換為byte        //處理異常,將ascii碼小于0的轉換為大于0    var ab = new ArrayBuffer(bytes.length);    var ia = new Uint8Array(ab);    for (var i = 0; i < bytes.length; i++) {      ia[i] = bytes.charCodeAt(i);    }     return new Blob( [ab] , {type : 'image/png'});  }   </script>  </body> </html>

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VeVb武林網。 


注:相關教程知識閱讀請移步到JAVA教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
最近2019年好看中文字幕视频| 久久国产精品免费视频| 久久久久久久999| 青青精品视频播放| 91在线免费观看网站| 亚洲一区二区三区sesese| 91精品中文在线| 影音先锋欧美在线资源| 精品性高朝久久久久久久| 国产一区二区在线免费| 国产精品无av码在线观看| 亚洲最大成人网色| 欧美大尺度激情区在线播放| 韩国三级电影久久久久久| 国产主播喷水一区二区| 欧美日韩美女在线观看| 欧美在线视频导航| 国产日本欧美一区二区三区在线| 日产精品99久久久久久| 成人国产在线激情| 91夜夜未满十八勿入爽爽影院| 亚洲一区二区久久久| 午夜精品久久久久久久久久久久| 亚洲小视频在线| 中文字幕精品久久| 91精品视频在线| 国产97在线观看| 丝袜亚洲欧美日韩综合| 亚洲精品乱码久久久久久金桔影视| 色狠狠久久aa北条麻妃| 最新69国产成人精品视频免费| 姬川优奈aav一区二区| 亚洲aa在线观看| 国产自产女人91一区在线观看| 亚洲精品在线视频| 久久综合免费视频影院| 亚洲男子天堂网| 这里只有精品视频在线| 中文字幕精品国产| 欧美日韩国产在线播放| 福利二区91精品bt7086| 国产成人精品视| 亚洲成**性毛茸茸| 欧美激情免费视频| 夜夜嗨av一区二区三区免费区| 成人在线一区二区| 国产偷国产偷亚洲清高网站| 久久国产精品久久国产精品| 播播国产欧美激情| 亚洲午夜色婷婷在线| 9.1国产丝袜在线观看| 岛国av一区二区在线在线观看| 久久五月天综合| 日韩在线视频二区| 亚洲欧美日韩综合| 亚洲高清久久久久久| 亚洲国产一区二区三区在线观看| 国产精品极品尤物在线观看| 久久人人爽人人爽人人片av高清| 国产网站欧美日韩免费精品在线观看| 欧美一级视频免费在线观看| 日韩在线视频一区| 国产亚洲欧洲黄色| 日本精品视频在线观看| 欧美性猛交xxxx| 欧美在线不卡区| www.国产一区| 亚洲国产婷婷香蕉久久久久久| 68精品久久久久久欧美| 97视频在线观看亚洲| 久久色免费在线视频| 欧美激情一区二区三区在线视频观看| 欧美日本国产在线| 91av在线精品| 欧美性黄网官网| 亚洲女成人图区| 精品欧美国产一区二区三区| 人妖精品videosex性欧美| 久久精品色欧美aⅴ一区二区| 国产69精品久久久久9| 欧美精品在线免费| 欧美日韩国产中字| 一区二区国产精品视频| 亚洲精品videossex少妇| 亚洲激情第一页| 亚洲电影第1页| 亚洲女人天堂视频| 欧美亚洲午夜视频在线观看| 欧美黑人极品猛少妇色xxxxx| 欧美人与性动交a欧美精品| 国模叶桐国产精品一区| 久久久久免费精品国产| 欧美视频一二三| 精品国产一区二区三区久久狼5月| 欧美日韩国产影院| 九九热这里只有精品6| 亚洲国产精品中文| 亚洲精品v欧美精品v日韩精品| 久久视频国产精品免费视频在线| 欧美在线中文字幕| 欧美激情按摩在线| 国产成人精品久久二区二区| 日韩中文字幕精品视频| 在线视频欧美性高潮| 久久亚洲精品一区二区| 红桃av永久久久| 亚洲影院色无极综合| 成人a视频在线观看| 91久久国产精品91久久性色| 国产精品专区第二| 亚洲午夜未满十八勿入免费观看全集| 亚洲在线观看视频| 成人两性免费视频| 国产精品视频公开费视频| 欧美日韩成人网| 久久91精品国产| 69久久夜色精品国产7777| 国产精品久久久久免费a∨大胸| 久精品免费视频| 日韩精品极品视频免费观看| 久久国产精品亚洲| 日韩av网址在线| 精品自在线视频| 91九色国产在线| 久久综合色影院| 一区二区三区 在线观看视| 不用播放器成人网| 成人在线精品视频| 欧美亚洲国产视频| 亚洲人成在线电影| 国产日韩亚洲欧美| 日韩中文理论片| 精品久久香蕉国产线看观看亚洲| 欧美激情在线狂野欧美精品| 亚洲91精品在线观看| 97婷婷大伊香蕉精品视频| 91人人爽人人爽人人精88v| 亚洲高清久久网| 在线日韩日本国产亚洲| 午夜剧场成人观在线视频免费观看| 91视频-88av| 亚洲国产成人精品久久久国产成人一区| 91中文在线视频| 国产一区在线播放| 日韩专区中文字幕| 国产91精品最新在线播放| 国产日韩在线观看av| 欧洲s码亚洲m码精品一区| 青青在线视频一区二区三区| 久久久成人精品| 亚洲成人激情视频| 亚洲精品久久久久久久久久久| 日韩av资源在线播放| 国产精彩精品视频| 久久久亚洲福利精品午夜| 亚洲精品中文字幕av| www.日韩不卡电影av| 久久久亚洲福利精品午夜| 亚洲午夜精品久久久久久久久久久久| 亚洲综合中文字幕在线观看| 日韩精品在线第一页| 欧美成人手机在线| 97在线视频一区| 2023亚洲男人天堂|