html5怎么做扫描二维码的功能

xyq1986 2015-08-20 11:19:26
像微信扫描二维码那样,要用H5来做,是嵌在微信公众号里的一个页面功能,看了其它的用getUserMedia+cavas截屏,好像有些浏览不支持,而且不太稳定,有其它比较好的解决方案吗?
...全文
10740 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq_37792538 2017-08-07
  • 打赏
  • 举报
回复
LZ,用你这份代码怎么一直没法调用摄像头啊
夜幕下的手指 2017-07-21
  • 打赏
  • 举报
回复
楼主找到了吗?可以发我一份吗邮箱13308473271@163.com
帅哥陈292 2017-03-30
  • 打赏
  • 举报
回复
我也在找二维码扫描资料,有谁能提供准备方便的源代码吗
thegeek 2015-09-23
  • 打赏
  • 举报
回复
在web页面上快速生成二维码的两种实用方法 ... 参考吧: http://www.gbtags.com/gb/share/5293.htm
若枫Sonny 2015-09-23
  • 打赏
  • 举报
回复
引用 3 楼 xyq1986 的回复:
[quote=引用 2 楼 xmt1139057136 的回复:] html5对浏览器支持必须是ie9+
手机上的浏览器啊,手机上的浏览器没有全支持吗[/quote] 我是iOS9系统,safari提示不支持getUserMedia
业余草 2015-09-23
  • 打赏
  • 举报
回复
引用 8 楼 jjfat 的回复:
在web页面上快速生成二维码的两种实用方法 ... 参考吧: http://www.gbtags.com/gb/share/5293.htm
别人是扫描,不是生成
业余草 2015-09-23
  • 打赏
  • 举报
回复
引用 7 楼 iMaplezhou 的回复:
[quote=引用 3 楼 xyq1986 的回复:] [quote=引用 2 楼 xmt1139057136 的回复:] html5对浏览器支持必须是ie9+
手机上的浏览器啊,手机上的浏览器没有全支持吗[/quote] 我是iOS9系统,safari提示不支持getUserMedia[/quote] 不支持就没有办法,所以还是换其他的方法吧!做本地的app
Irise_liu 2015-08-25
  • 打赏
  • 举报
回复
补充一下后台解析需引用ZXing,一开始用的ThoughtWorks.QRCode效果不是很好
Irise_liu 2015-08-25
  • 打赏
  • 举报
回复
恰好这几天在尝试,没有兼容所有浏览器。只在手机上试过firefox, 自带浏览器试过不行。以下是代码: ---------------------------------------------------------Html---------------------------------------------------------------- <form id="picForm" action="@Url.Action("scan")" method="post"> <input type="hidden" value="" id="code" name="code" /> <input type="hidden" value="" id="status" name="status" /> <section style="position: relative;"> <video width="100%" id="video" autoplay="autoplay"></video> <div id="result" style="position: absolute; top: 0; left: 0;width:100%;height:100%;text-align: center;border:1px solid yellow;" onclick="scanCode();"> <section class="smtwo" style="text-align:center;"> <h3 ><a class="back" href="${ctx }/index/index.htm"> <img src="images/smtwo_1.png" style="border: none" alt=""></a>请将扫描框对准设备或包装上的二维码 </h3> </section> <div id="getCode" style="margin:auto;width:200px;height:200px;border:1px solid red;"></div> <canvas width="200" height="200" id="canvas"></canvas> </div> </section> </form --------------------------------------------------------------Js-------------------------------------------------------------------- <script> var video, canvas, videoObj; window.addEventListener('DOMContentLoaded', function () { 'use strict'; //调取摄像头 navigator.getUserMedia = navigator.getUserMedia || navigator.webkitGetUserMedia || navigator.mozGetUserMedia; window.URL = window.URL || window.webkitURL || window.mozURL || window.msURL; if (navigator.getUserMedia) { videoObj = { video: true }; video = document.getElementById("video");// $("#video").get(0); canvas = document.getElementById("canvas");// $("#canvas").get(0); navigator.getUserMedia({ video: true }, gotStream, noStream); } else { alert('Native web camera streaming (getUserMedia) not supported in this browser.'); } //调取摄像头成功的回调函数 function gotStream(stream) { if (video.mozSrcObject !== undefined) { video.mozSrcObject = stream; } else { video.src = (window.URL && window.URL.createObjectURL(stream)) || stream; } video.play(); //启动摄像头成功之后开始获取二维码 scanCode(); } //调取摄像头失败的回调函数 function noStream(error) { alert('An error occurred: [CODE ' + error.code + ']'); } }, false); //抓取video画面放入canvas function photograph() { var context = canvas.getContext("2d"); // 截取取景框范围(这里用canvas做取景框) //var x = canvas.clientLeft; //var y = canvas.clientTop; //context.drawImage(video,x, y, canvas.width, canvas.height, 0, 0, canvas.width, canvas.height); var box = getBox(); context.drawImage(video, box.X, box.Y, box.W, box.H, 0, 0, box.W , box.H); //imageConvertToGray(context); var imgData = canvas.toDataURL("image/png"); $("#code").val(imgData); } function getBox() { var box = $("#getCode"); var position = { X: $(box).offset().top, Y: $(box).offset().left, W: $(box).width(), H: $(box).height() }; return position } //将图片处理成黑白的(二维码扫描需要处理黑白色图片,如果仅用于拍照这一步就省略了) function imageConvertToGray(ctx) { var length = canvas.width * canvas.height; imageData = ctx.getImageData(0, 0, canvas.width, canvas.height); for (var i = 0; i < length * 4; i += 4) { var myRed = imageData.data[i]; var myGreen = imageData.data[i + 1]; var myBlue = imageData.data[i + 2]; myGray = parseInt((myRed + myGreen + myBlue) / 3); imageData.data[i] = myGray; imageData.data[i + 1] = myGray; imageData.data[i + 2] = myGray; } ctx.putImageData(imageData, 0, 0); } function scanCode() { //生成图片的base64码 photograph(); var data = { "code": $("#code").val() }; ajaxPostCompliate("@Url.Action("scan")", data, function (result) { console.info("-----------result--------------" + result); if (result != null) {//扫描出结果 var obj = JSON.parse(result); if (obj.org != undefined) { location.href = "@Url.Action("ScanResult")?org=" + obj.org + "&tp=" + obj.tp + "&ad=" + obj.ad; } else { alert("该二维码非ME+授权编码"); } } else {//继续扫描 setTimeout(function () { scanCode(); }, 2000); } }); } </script> ------------------------------------------------------后台解析---------------------------------------------------------- [HttpPost] public ActionResult Scan(string code) { BarcodeReader reader = new BarcodeReader(); MemoryStream stream = new MemoryStream(Convert.FromBase64String(code)); Bitmap img = new Bitmap(stream); Result result = reader.Decode(img); return Json(result.Text); }
香蕉猪 2015-08-25
  • 打赏
  • 举报
回复
手机是wikit内核的,,,楼主上网上找找手机二维码的代码,,,一抓一大把。。。。
业余草 2015-08-21
  • 打赏
  • 举报
回复
html5对浏览器支持必须是ie9+
业余草 2015-08-21
  • 打赏
  • 举报
回复
w3c上,明确说明了哪些浏览器支持html5
xyq1986 2015-08-21
  • 打赏
  • 举报
回复
引用 2 楼 xmt1139057136 的回复:
html5对浏览器支持必须是ie9+
手机上的浏览器啊,手机上的浏览器没有全支持吗

39,084

社区成员

发帖
与我相关
我的任务
社区描述
HTML5是构建Web内容的一种语言描述方式。HTML5是互联网的下一代标准,是构建以及呈现互联网内容的一种语言方式.被认为是互联网的核心技术之一。
社区管理员
  • HTML5社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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