qrcode render 二维码扫描读取
著名的 qrcode 是 zxing
https://github.com/zxing/zxing 基于 java, java 真的是轮子多啊...
zxing 的 javascript 版本是
https://github.com/LazarSoft/jsqrcode
这个版本的代码非常的 old school.

一上来就是十几行 script, 完全没有模块管理概念. 一堆全局变量
no npm, no typescript.
不过运行是 ok 的, 所以大家可以放心用.
主要的功能是 qrcode.js 里面的 process 方法, 大家可以看看源码.
只要设定好 qrcode.width, height, imageData 再调用 process 就可以了.
至于如何获取 width,height,imageData 就随便我们咯, 可以是 img upload -> canvas -> imageData, 也可以是用 WebRTC -> video -> canvas -> imageData
demo 里面有 WebRTC 的实现可以参考.
下面是例子 :
import { Component, ElementRef, ViewChild } from '@angular/core';
@Component({
selector: 'app-root',
templateUrl: './app.component.html',
styleUrls: ['./app.component.css']
})
export class AppComponent {
title = 'app';
@ViewChild('videoEl', { read: ElementRef })
videoEL: ElementRef;
start() {
let video = this.videoEL.nativeElement as HTMLVideoElement;
navigator.mediaDevices.getUserMedia({ video: true, audio: false }).then((stream) => {
video.src = window.URL.createObjectURL(stream);
video.play();
let canvas = document.createElement('canvas') as HTMLCanvasElement;
let context = canvas.getContext('2d');
let interval = setInterval(() => {
canvas.width = video.videoWidth
canvas.height = video.videoHeight;
context.drawImage(video, 0, 0);
let qrcode = window['qrcode'];
qrcode.debug = false;
qrcode.width = canvas.width;
qrcode.height = canvas.height;
qrcode.imagedata = context.getImageData(0, 0, canvas.width, canvas.height);
try {
let result = qrcode.process();
console.log(result);
clearInterval(interval);
video.pause();
stream.getTracks()[0].stop();
}
catch (e) {
console.log(e);
}
}, 500);
}).catch(() => {
console.log('user no allow');
});
}
upload(files: FileList) {
let file = files[0];
let img = new Image();
img.onload = (e) => {
window.URL.revokeObjectURL(img.src);
// document.body.appendChild(img);
let canvas = document.createElement('canvas') as HTMLCanvasElement;
let context = canvas.getContext('2d');
canvas.width = img.width;
canvas.height = img.height;
context.drawImage(img, 0, 0);
// document.body.appendChild(canvas);
let qrcode = window['qrcode'];
qrcode.debug = false;
qrcode.width = canvas.width;
qrcode.height = canvas.height;
qrcode.imagedata = context.getImageData(0, 0, canvas.width, canvas.height);
console.log(qrcode.imagedata);
try {
let result = qrcode.process();
console.log(result);
}
catch (e) {
console.log(e);
}
}
img.src = window.URL.createObjectURL(file);
}
go() {
let qrcode = window['qrcode'];
qrcode.setWebcam('video');
qrcode.callback = function (decodedDATA) {
alert(decodedDATA);
};
}
}
html
<video #videoEl id="video" width="400" height="400">
</video> <!-- <div (click)="go()" >start</div> -->
<div (click)="start()" >start</div> <input type="file" (change)="upload($event.target.files)" >
index.html
<body> <!-- 不打包压缩的话, 118kb -->
<script src="/assets/qrcode/grid.js"></script>
<script src="/assets/qrcode/version.js"></script>
<script src="/assets/qrcode/detector.js"></script>
<script src="/assets/qrcode/formatinf.js"></script>
<script src="/assets/qrcode/errorlevel.js"></script>
<script src="/assets/qrcode/bitmat.js"></script>
<script src="/assets/qrcode/datablock.js"></script>
<script src="/assets/qrcode/bmparser.js"></script>
<script src="/assets/qrcode/datamask.js"></script>
<script src="/assets/qrcode/rsdecoder.js"></script>
<script src="/assets/qrcode/gf256poly.js"></script>
<script src="/assets/qrcode/gf256.js"></script>
<script src="/assets/qrcode/decoder.js"></script>
<script src="/assets/qrcode/qrcode.js"></script>
<script src="/assets/qrcode/findpat.js"></script>
<script src="/assets/qrcode/alignpat.js"></script>
<script src="/assets/qrcode/databr.js"></script> <app-root></app-root>
</body>
qrcode render 二维码扫描读取的更多相关文章
- 【React Native 实战】二维码扫描
1.前言今天介绍React Native来实现二维码扫描的功能.首先我们要借助第三方插件react-native-barcode-scanner-universal来实现跨平台二维码扫描. 2.介绍 ...
- 使用jquery.qrcode生成二维码及常见问题解决方案
转载文章 使用jquery.qrcode生成二维码及常见问题解决方案 一.jquery.qrcode.js介 jquery.qrcode.js 是一个纯浏览器 生成 QRcode 的 jQuery ...
- Android之条形码、二维码扫描框架(非原创)
文章大纲 一.条形码.二维码扫描框架介绍二.条形码.二维码的区别和组成结构介绍三.条形码.二维码扫描框架应用场景四.BGAQRCode-Android框架实战五.项目源码下载六.参考文章 一.条形码. ...
- [Unity3D]自制UnityForAndroid二维码扫描插件
一周左右终于将二维码生成和扫描功能给实现了,终于能舒缓一口气了,从一开始的疑惑为啥不同的扫码客户端为啥扫出来的效果不同?通用的扫描器扫出来就是一个下载APK,自制的扫描器扫出来是想要的有效信息,然后分 ...
- iOS二维码扫描IOS7系统实现
扫描相关类 二维码扫描需要获取摄像头并读取照片信息,因此我们需要导入系统的AVFoundation框架,创建视频会话.我们需要用到一下几个类: AVCaptureSession 会话对象.此类作为硬件 ...
- iOS - 二维码扫描和应用跳转
序言 前面我们已经调到过怎么制作二维码,在我们能够生成二维码之后,如何对二维码进行扫描呢? 在iOS7之前,大部分应用中使用的二维码扫描是第三方的扫描框架,例如ZXing或者ZBar.使用时集成麻烦, ...
- iOS开发-二维码扫描和应用跳转
iOS开发-二维码扫描和应用跳转 序言 前面我们已经调到过怎么制作二维码,在我们能够生成二维码之后,如何对二维码进行扫描呢? 在iOS7之前,大部分应用中使用的二维码扫描是第三方的扫描框架,例如Z ...
- iOS使用AVFoundation实现二维码扫描(ios7以上)——转载
关于二维码扫描有不少优秀第三方库: ZBar SDK 里面有详细的文档,相应介绍也非常多,如:http://rdcworld-iphone.blogspot.in/2013/03/how-to-use ...
- iOS使用AVFoundation实现二维码扫描
原文:http://strivingboy.github.io/blog/2014/11/08/scan-qrcode/ 关于二维码扫描有不少优秀第三方库如: ZBar SDK 里面有详细的文档,相应 ...
随机推荐
- 【题解】luogu P3386 【模板】二分图匹配
题面:https://www.luogu.org/problemnew/show/P3386 好像没有人发Ford-Fulkerson,我来一发, 这道题和P2756飞行员配对方案问题方法一样,网络流 ...
- DDos攻击的常见方法及防御方法
什么是DDoS? DDoS是英文Distributed Denial of Service的缩写,意即“分布式拒绝服务”,那么什么又是拒绝服务(Denial of Service)呢?可以这么理解,凡 ...
- python --- 05 字典 集合
一.字典 可变数据类型 {key:value}形式 查找效率高 key值必须是不可变的数据类型 1.增删改查 1).增 dic["新key"] = "新va ...
- Oracle使用——oracle表锁住,杀掉锁表进程
背景 在操作Oracle时,多人同时操作oracle数据库的同一张表的时候,经常会造成锁表现象,这时需要手动进行解锁. 步骤 以dba身份登录Oracle数据库(否则用户缺少杀掉进程权限,需要给用户分 ...
- CentOS7 搭建Docker
搭建环境 Docker支持一下的CentOS版本 CentOS 6.5 (64-bit)或者更高版本 CentOS 7 (64-bit) 搭建条件 Docker运行在CentOS 7上,要求系统64位 ...
- if语句学习
#print("您好,我叫周星驰") ''' x=1+2+3 print(x*4) print(x**x) a=input("请输入相应的数字a") a=int ...
- ODAC(V9.5.15) 学习笔记(四)TOraQuery (1)
TOraQuery是ODAC中常用的一个组件,其继承关系如下: TDataSet ---TMemDataSet ---TCustomDADataSet ---TOraDataSet ---TCusto ...
- 《计算机网络》-CCNA命令大全
Router> //用户模式,只能简单的show及ping/tracer Router>enable //从用户模式进入特权模式 Router# //特权模式,能够进行所有的show及pi ...
- ARM MOV PC加8
缘由 今天在分析ARM伪指令ADR,书上说ADR通常会被一条ADD或SUB指令替代实现相同功能.我反汇编了一下确实如此会基于PC相对偏移的地址量读取到寄存器中,可是计算却发现对不上 如上图所示,ADR ...
- Leetcode66-Plus One-Eassy
Given a non-empty array of digits representing a non-negative integer, plus one to the integer. The ...