AVA整合HTML5实现扫描二维码功能项目源码
2016-07-09 15:53
609 查看
最近一个需求就是做一个二维码扫描的功能,但是又不想使用安卓APP的方式实现,百度了一下貌似HTML5可以实现。
项目使用环境以及工具:
Eclipse,JDK1.7,struts2,HTML5,Jquery,QRCode
引用
HTML5技术支持WebApp在手机上拍照,显示在页面上并上传到服务器。这是手机微博应用中常见的功能,当然你也可以在其它类型应用中适当使用此技术。
这个功能不但手机端可以实现PC端也可以很好的实现,这个应用接口技术就是getUserMedia API,它能让应用开发者访问用户的摄像头或内置相机。下面就让我展示一下如何通过浏览器来访问你的摄像头,并提取截屏图形。
一、视频流
HTML5 的 The Media Capture(媒体捕捉) API 提供了对摄像头的可编程访问,用户可以直接用 getUserMedia (请注意目前仅Chrome和Opera支持)获得摄像头提供的视频流。我们需要做的是添加一个HTML5 的 Video 标签,并将从摄像头获得的视频作为这个标签的输入来源。
二、拍照
拍照是采用HTML5的Canvas功能,实时捕获Video标签的内容,因为Video元素可以作为Canvas图像的输入,所以这一点很好实现。
三、 获取图片
从Canvas获取图片数据的核心思路是用canvas的toDataURL将Canvas的数据转换为base64位编码的PNG图像,类似于“data:image/png;base64,xxxxx”的格式。
var imgData=canvas.toDataURL(“image/png”);
这样,imgData变量就存储了一长串的字符数据内容,表示的就是一个PNG图像的base64编码。因为真正的图像数据是base64编码逗号之后的部分,所以要让实际服务器接收的图像数据应该是这部分,我们可以用两种办法来获取。
第一种:是在前端截取22位以后的字符串作为图像数据,例如:
var data=imgData.substr(22);
第二种:就是替换;前面的部分为"";
var image = canvas.toDataURL("image/png").replace("data:image/png;base64,", "");
反正不管如何实现,能获取到图片流即可、
四、上传图片并解析
使用 setInterval定时上传到项目后台使用开源QRCode.jar 解析图片获取二维码信息。
前台部分代码:
JavaScript code
?
后台部分代码:
Java code
?
调用电脑拍摄一定要允许操作。现在只需要HTML5的画布技术和javaScript,我们就能简单快速的操作用户的摄像头。手机不仅可以调用摄像头扫描,PC不仅仅能访问摄像头,而且利用HTML5强大的画布技术,我们可以给图片上加入各种迷人的滤镜效果。现在,在浏览器里用自己的摄像头给自己拍张照片吧!
有些手机可能无法调出摄像头,那就赶紧换手机吧,别out了。
附上演示地址:http://monitor.52itstyle.com/index.html
CSDN 下载地址:http://download.csdn.net/detail/zhulin2012/9571624
百度云下载地址:http://pan.baidu.com/s/1slaNMnr
项目使用环境以及工具:
Eclipse,JDK1.7,struts2,HTML5,Jquery,QRCode
引用
HTML5技术支持WebApp在手机上拍照,显示在页面上并上传到服务器。这是手机微博应用中常见的功能,当然你也可以在其它类型应用中适当使用此技术。
这个功能不但手机端可以实现PC端也可以很好的实现,这个应用接口技术就是getUserMedia API,它能让应用开发者访问用户的摄像头或内置相机。下面就让我展示一下如何通过浏览器来访问你的摄像头,并提取截屏图形。
一、视频流
HTML5 的 The Media Capture(媒体捕捉) API 提供了对摄像头的可编程访问,用户可以直接用 getUserMedia (请注意目前仅Chrome和Opera支持)获得摄像头提供的视频流。我们需要做的是添加一个HTML5 的 Video 标签,并将从摄像头获得的视频作为这个标签的输入来源。
二、拍照
拍照是采用HTML5的Canvas功能,实时捕获Video标签的内容,因为Video元素可以作为Canvas图像的输入,所以这一点很好实现。
三、 获取图片
从Canvas获取图片数据的核心思路是用canvas的toDataURL将Canvas的数据转换为base64位编码的PNG图像,类似于“data:image/png;base64,xxxxx”的格式。
var imgData=canvas.toDataURL(“image/png”);
这样,imgData变量就存储了一长串的字符数据内容,表示的就是一个PNG图像的base64编码。因为真正的图像数据是base64编码逗号之后的部分,所以要让实际服务器接收的图像数据应该是这部分,我们可以用两种办法来获取。
第一种:是在前端截取22位以后的字符串作为图像数据,例如:
var data=imgData.substr(22);
第二种:就是替换;前面的部分为"";
var image = canvas.toDataURL("image/png").replace("data:image/png;base64,", "");
反正不管如何实现,能获取到图片流即可、
四、上传图片并解析
使用 setInterval定时上传到项目后台使用开源QRCode.jar 解析图片获取二维码信息。
前台部分代码:
JavaScript code
?
Java code
?
有些手机可能无法调出摄像头,那就赶紧换手机吧,别out了。
附上演示地址:http://monitor.52itstyle.com/index.html
CSDN 下载地址:http://download.csdn.net/detail/zhulin2012/9571624
百度云下载地址:http://pan.baidu.com/s/1slaNMnr
相关文章推荐
- HTML5基础学习笔记(三)
- HTML5之客户端存储数据
- HTML5简介
- HTML5实测体验
- html5+css 三列布局
- html5+css 两列布局
- HTML5知识
- h5文字自适应
- HTML与HTML5有什么区别
- HTML5混编学习笔记: 表单(form)、响应式web设计(RWD)
- CDH5启用Kerberos和添加Sentry服务
- HTML5-CSS面试题
- 做HTML5服务端推送
- 什么是H5
- 一款好看+极简到不行的HTML5音乐播放器-skPlayer
- html5常用的小控件,收藏了
- 浅谈html5 响应式布局
- HTML5使用Div标签来实现表格
- HTML5基础学习笔记(二)
- html5 百度 google地图定位关键字搜索附近