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 里面有详细的文档,相应 ...
随机推荐
- netty支持的各种socketchannel实现及比较
性能上从低到高如下: OioSocketChannel:传统,阻塞式编程. NioSocketChannel:select/poll或者epoll,jdk 7之后linux下会自动选择epoll. E ...
- shell实现每天0点备份mysql数据库
就两个文件, 本人学识尚浅,不解释,怕大佬喷. back.sh #/bin/bash MYSQLUSER=root MYSQLPWD=lizhenghua DATABASES=zskdb MYSQLD ...
- 利用shell脚本通过ssh绕过输入密码直接登录主机
shell #!/usr/bin/expect spawn ssh root@192.168.137.141 expect "*password:" send "lizh ...
- 【python016--序列】
一.列表,元组和字符串的共同点 --都可以通过索引得到每一个元素 --默认索引值总是从0开始 --可以通过分片的方法得到一个范围内的元素的集合 --有很多共同的操作符(重复操作符,拼接操作符.成员关系 ...
- Java 使用命令对堆线程分析
一.dump基本概念 在故障定位(尤其是out of memory)和性能分析的时候,经常会用到一些文件来帮助我们排除代码问题.这些文件记录了JVM运行期间的内存占用.线程执行等情况,这就是我们常说的 ...
- HDU 5852 Intersection is not allowed!(LGV定理行列式求组合数)题解
题意:有K个棋子在一个大小为N×N的棋盘.一开始,它们都在棋盘的顶端,它们起始的位置是 (1,a1),(1,a2),...,(1,ak) ,它们的目的地是 (n,b1),(n,b2),...,(n,b ...
- java 之 schema解析
一,schema约束 *dtd语法:<ELEMENT 元素名 约束> *schema符合xml的语法,xml语句 **一个xml中可以有多个schema,多个schema使用名称空间区分( ...
- vue中使用BetterScroll
BetterScroll可以通过给content加min-height实现永远滚动 content千万不可以删除,千万不要在 content上写v-if
- (zhuan) awesome-object-proposals
awesome-object-proposals A curated list of object proposals resources for object detection. This ...
- Bytom资产发行与部署合约教程
比原项目仓库: Github地址:https://github.com/Bytom/bytom Gitee地址:https://gitee.com/BytomBlockchain/bytom 发行资产 ...