已经三个月没有写博客了吧,因为工作有点忙,写完之后就想在床上躺着,所以就一直没有写过了,今天七夕,没人给我玩。只能写博客了

最近工作上需要在前端页面进行拍照以及解析条形码和二维码,所以研究了下JS的API,但是只支持谷歌内核的浏览器
可以在这里看下: https://developer.mozilla.org/zh-CN/docs/Web/API

接下来上代码,这个是封装好的相机组件


/*** 创建相机对象* @Author Fanxing* @param app  绑定div* @param width 宽度 (与app宽度相同* @param height 高度 (与app高度相同* @param type 没有类型,忽略。。不是相机前置或后置。。* ps: 扫码结果在 res.text里,方法是qrcode  获取拍照图片调用 getImg*/
function camera(app, width, height, type) {let appObject = document.getElementById(app);let video = document.createElement("video");let span = document.createElement("span");let facingMode = 'environment';const codeReader = new ZXingBrowser.BrowserMultiFormatReader();video.style.width = widthvideo.id = 'video'video.style.height = heightvideo.autoplay = "autoplay";video.style.margin = 0;appObject.insertBefore(video, appObject.childNodes[0]);/***  修改优先使用那颗摄像头,前置或后置* */this.setFacingMode = function(type) {// 前置摄像头:user 后置摄像头:environmentfacingMode = type;}this.establish = function establish() {let constraints = {video: {facingMode: facingMode,height: height,width: width},audio: false};let promise = navigator.mediaDevices.getUserMedia(constraints);promise.then(function(MediaStream) {video.srcObject = MediaStream;video.play();}).catch(function(PermissionDeniedError) {console.log(PermissionDeniedError);})}this.photograph = function photograph() {canvas = document.createElement("canvas");canvas.height = height;canvas.width = width;let ctx = canvas.getContext('2d');ctx.drawImage(video, 0, 0, width, height);return canvas;}// 解析码,获取解码的内容this.qrcode = function qrcode() {var promise = codeReader.decodeOnceFromVideoElement(video);// codeReader.decodeOnceFromVideoElement(video).then(function(res){//  console.log("res:" + res)//  return res;// })console.log(promise)return promise;}this.getImg = function getImg() {return this.photograph().toDataURL('image/jpeg')}this.close = function close() {this.MediaStreamTrack && this.MediaStreamTrack.stop();}// 开始疯狂扫码this.starcode = function starcode() {alert("在外部实现!!!")}//停止疯狂扫码this.stopcode = function stopcode() {alert("在外部实现!!!")}
}

扫码功能需要:zxing-browser.min.js

DEMO:

<!doctype html>
<html lang="en"><head><title>GET VIDEO</title><meta charset="utf-8"></head><body><span id="sa"></span><div style="width:500px;height:800px;border: 1px solid red;" id="app"></div><button id="snap" onclick="qr()">拍照吧</button><button id="snap" onclick="vi.close()">拍照</button><script type="text/javascript" src="js/zxing-browser.min.js"></script><script type="application/javascript" src="js/xcamera.js"></script><script>let vi = new camera("app", 500, 1000);vi.establish()function qr() {vi.qrcode().then(function(res) {if (res.text != undefined) {alert("识别成功" + res.text);}})}</script></body>
</html>

代码和zxing的下载地址:https://gitee.com/fxboy/html-camera

原生的JS实现摄像头拍照/扫码相关推荐

  1. 在微信小程序中 调用前置摄像头拍照 后置摄像头拍照扫码

    1.需求:点击扫码按钮,扫描二维码识别单号    实现:  <view class="getcode" bindtap="scanCode"> &l ...

  2. @zxing/library插件在H5页面上调用摄像头进行扫码识别解决方法,以及对华为手机的兼容

    @zxing/library调用摄像头 这是第一次写博客,不太熟悉,如果我的方法有些问题,请多指正,谢谢!! 关于@zxing/library 导入@zxing/library npm i @zxin ...

  3. html5 隐藏摄像头,js控制摄像头拍照 请问html5怎么关闭摄像头?

    JS 能不能调用摄像头并拍照 可以调用,不过适合HTML5,浏览器版本也要高点,有些低版本的估计不支持 var promisifiedOldGUM = function(constraints) { ...

  4. 微信js调用摄像头拍照上传_微信JSSDK实现打开摄像头拍照再将相片保存到服务器...

    在微信端打开手机摄像头拍照,将拍照图片保存到服务器上需要使用到微信的JSSDK接口,主要使用到了拍照或从手机相册中选图接口(chooseImage),上传图片接口(uploadImage) 参考资料: ...

  5. JS调用摄像头拍照,上传图片并显示到前端页面

    本文实例为大家分享了JS实现截取视频画面的具体代码,供大家参考,具体内容如下: index.jsp 展示界面,按钮点击拍照,将拍照图片显示 <img id="showImage_img ...

  6. js调用摄像头拍照并访问后端代码

    1.先上效果(注意我的摄像头是打开的这里获取的是实时的视频流): 图略,太丑了决定删了 2.index.html <!-- Copyright (c) 2018 ml5This software ...

  7. 前端调用手机摄像头权限进行扫码解析

    前端调用手机摄像头权限进行扫码解析(demo含Vue及原生) 前端调用手机摄像头权限进行扫码解析(demo含Vue及原生js写法) 引子 实践 此时已经可以成功调用摄像头,接下来集成进Vue工程中 最 ...

  8. 【科普文】二维码的[生成]和[扫码]

    作者:孙辉,美团金融前端团队成员.15年毕业加入美团,相信技术,更相信技术只是大千世界里知识的一种,个人博客: sunyuhui.com 最近这段时间,团队在做的业务主要和二维码相关,在做的过程中,发 ...

  9. 微信扫码支付初步使用

    微信扫码支付初步使用 一丶对二维码的认知 二维码又称QR Code,QR全称Quick Response,是一个近几年来移动设备上超流行的一种编码方式,它比传统的Bar Code条形码能存更多的信息, ...

最新文章

  1. .net Remoting(2)——信道,MarshalByRefObject类
  2. Floodlight 处理交换机增加/移除过程
  3. UILocalNotification详解
  4. SQL—— Create table as select 与 使用select查询结果创建新表
  5. 字节(bytes) 二进制序列类型
  6. git push 失败出现error: src refspec master does not match any.解决方案
  7. wap ios android,iOS/Android/WAP 全兼容专题页面制作方法(一)
  8. PHP 每日学习函数之 floatval 函数
  9. SNDA校园招聘,参加哈尔滨和西安的面试
  10. python求三角形的角度
  11. APP开发多少钱多少人和哪些注意事项
  12. 计算机win10装机目的,win10装机版是什么意思
  13. 微信小程序集成腾讯IM,实现实时音视频通话,1V1聊天
  14. python markdown2 样式_Python markdown2.markdown方法代碼示例
  15. exit abort return 区别
  16. 最大似然估计,最大后验估计,贝叶斯估计联系与区别
  17. 关于unity3D人物存在刚体的情况下移动时出现抖动的问题
  18. 基于BERT的情感分析模型
  19. 相识如茶,相思似酒(转)
  20. 什么是单色、双基色、三基色 LED 显示屏

热门文章

  1. 抖音跳转微信小程序方法有哪些
  2. 去除mac系统下浏览器烦人的右侧和下侧广告条
  3. linux vim 复制一个单词,Vim复制粘贴与寄存器
  4. Vivado如何使用Chipscope
  5. 手把手教你设置JVM调优参数
  6. 系统下实现电脑服务器自动重启
  7. bug生命周期的几个状态
  8. HTML用循环显示名言,网页特效丨标题栏文字循环轮播的js特效 - 网页特效代码大全_网页特效集锦_站长素材站...
  9. 软件设计师 操作系统
  10. java语言编写防沉迷系统_-基于android的网购防沉迷系统设计的开发与实现.doc