JAVA整合HTML5实现扫描二维码功能项目源码

不是太高的手 2016-07-09 03:44:14
最近一个需求就是做一个二维码扫描的功能,但是又不想使用安卓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 解析图片获取二维码信息。

前台部分代码:

<video id="video">
<script>
var flag = true;
window.addEventListener("DOMContentLoaded", function () {
var video = document.getElementById("video"), canvas, context;
try {
canvas = document.createElement("canvas");
canvas.width = 600;
canvas.height = 600;
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) {
alert("请检查是否开启摄像头");
flag = false;
}
);
else alert("Native device media streaming (getUserMedia) not supported in this browser");

setInterval(function () {
if(!flag){
return;
}
context.drawImage(video, 0, 0, canvas.width = video.videoWidth, canvas.height = video.videoHeight);
var image = canvas.toDataURL("image/png").replace("data:image/png;base64,", "");
$.ajax({
url : 'qRCodeAction_decoderQRCode.action',
async : false,
type : 'post',
data : {
'time' : (new Date()).toString(),
'img' : image
},
success : function(result) {

},
});
}, 5000);
}, false);
</script>

后台部分代码:

/**
* 解析二维码
*/
public String decoderQRCode(){
try {
String realpath = ServletActionContext.getServletContext().getRealPath("/file");
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
String imgName = sdf.format(new Date()) + ".png";
String filePath = realpath+Constants.SF_FILE_SEPARATOR+imgName;
OutputStream out = new FileOutputStream(filePath);
QRCode.GenerateImage(img,out);//生成图片
message = QRCode.decoderQRCode(filePath);
} catch (Exception e) {
e.printStackTrace();
}
return Action.SUCCESS;
}


调用电脑拍摄一定要允许操作。现在只需要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

...全文
4831 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
Q... 2019-10-23
  • 打赏
  • 举报
回复
本人初学者,能否附上完整Demo
dylanstudy 2017-01-19
  • 打赏
  • 举报
回复
有心意,楼主好样的
不是太高的手 2016-12-28
  • 打赏
  • 举报
回复
引用 3 楼 u013339851 的回复:
这个不能扫描二维码吗
可以 但是这个h5调用摄像头 没有安卓原生的好使
疯狂de攻城狮 2016-12-27
  • 打赏
  • 举报
回复
这个不能扫描二维码吗
不是太高的手 2016-07-11
  • 打赏
  • 举报
回复
引用 1 楼 zzp6347097 的回复:
哈哈 不错 可以看妹子嘛
看来得妹子 镇楼
骑猪压马路 2016-07-10
  • 打赏
  • 举报
回复
哈哈 不错 可以看妹子嘛
SSM项目weixin217基于微信小程序的学生签到系统设计与实现ssmpf.zip是一个利用SSM(Spring Spring MVC MyBatis)框架开发的Java Web项目,该项目旨在为学校提供一个简便的学生签到管理解决方案。通过整合微信小程序,学生可以无需安装额外的应用,直接在微信环境中完成签到流程。 项目的主要功能包括: 1. **学生签到**: 学生可以通过扫描二维码或地理位置信息来进行签到,确保了签到的真实性和准确性。 2. **签到记录**: 教师和管理员可以查看每个学生的签到记录,包括签到时间、地点等详细信息。 3. **课程管理**: 教师可以设置和管理课程的签到信息,如签到的时间范围、地点限制等。 4. **数据统计**: 系统提供数据统计功能,方便管理者了解学生的出勤情况,支持数据导出进行进一步分析。 5. **异常处理**: 对于未能正常签到的学生,系统提供了补签和请假流程,并记录异常原因。 6. **消息推送**: 通过微信小程序向学生推送签到提醒和结果通知,提高用户体验和互动性。 整个项目采用MVC设计模式,其中Spring负责整体业务的逻辑处理和依赖注入,Spring MVC用于处理HTTP请求和页面跳转,而MyBatis则处理与数据库的交互操作。数据库设计优化了存储结构和查询效率,以适应高并发的学校环境。 这个项目适合计算机科学、软件工程专业的学生作为课程设计、毕业设计或实践项目,也适用于对SSM框架和微信小程序开发感兴趣的开发者学习和参考。通过实际操作,学习者能够加深对Java Web开发的理解,掌握基于微信生态的应用开发流程,以及熟悉数据库设计和后端服务的开发技巧。

81,092

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧