master
cnwhy 7 years ago
parent e1d897bca3
commit a98b9e1129

@ -3,8 +3,9 @@ var qrDecode = require('./src/QRDecode');
var decodeByDom = function (dom) { var decodeByDom = function (dom) {
var canvas = document.createElement("canvas") var canvas = document.createElement("canvas")
var ctx = canvas.getContext('2d') var ctx = canvas.getContext('2d')
canvas.width = dom.width; var isVideo = dom.tagName == 'VIDEO'
canvas.height = dom.height; canvas.width = isVideo ? dom.videoWidth : dom.width;
canvas.height = isVideo ? dom.videoHeight : dom.height;
ctx.drawImage(dom, 0, 0, canvas.width, canvas.height); ctx.drawImage(dom, 0, 0, canvas.width, canvas.height);
var data = ctx.getImageData(0, 0, canvas.width, canvas.height); var data = ctx.getImageData(0, 0, canvas.width, canvas.height);
return qrDecode(data) return qrDecode(data)

@ -1,14 +1,97 @@
<!DOCTYPE html> <!DOCTYPE html>
<html lang="en"> <html lang="en">
<head> <head>
<meta charset="UTF-8"> <meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge"> <meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>qrcode-decode</title> <title>qrcode-decode</title>
</head> </head>
<body> <body>
<input type="file" name="file" id="file"><br> <input type="file" name="file" id="file">
<br>
<button id="videoBut" onclick="buttonClick()">启用摄像头</button><br>
<video id="video" width="300"></video>
<div></div> <div></div>
</body> </body>
<script type="text/javascript" src="test.js"></script> <script type="text/javascript" src="../dist/qr-decode.js"></script>
<script>
document.getElementById('file').onchange = function (event) {
var el = event.target;
if (!el.files.length) return;
var file = el.files[0];
new Promise(function (ok, no) {
if (window.URL && window.URL.createObjectURL) {
ok(window.URL.createObjectURL(file));
} else if (typeof FileReader) {
var reader = new FileReader();
reader.onload = evt => {
ok(evt.target.result);
};
reader.readAsDataURL(file);
} else {
no('浏览器不支持');
}
}).then((src) => {
qrDecode.decodeByUrl(src, function (err, txt) {
var msg = document.createElement("div")
if (err) {
console.log(err);
msg.innerHTML = "err: <br>" + err;
} else {
msg.innerHTML = txt;
}
document.body.appendChild(msg);
})
});
}
var video =document.getElementById('video');
var videoBut =document.getElementById('videoBut');
var xc;
videoBut.onclick = videoEnable;
function videoEnable() {
var URL = window.URL || window.webkitURL;
navigator.getUserMedia({
video: true
}, function (stream) {
video.src = URL.createObjectURL(stream);// 将获取到的视频流对象转换为地址
video.oncanplay = function(){
videoPlay();
video.width = video.videoWidth;
video.height = video.videoHeight;
}
}, function (error) {
alert(error.name || error);
});
}
function videoStop(){
clearInterval(xc);
video.pause();
videoBut.innerText = '启动';
videoBut.onclick = videoPlay;
}
function videoPlay(){
video.play();
videoBut.innerText = '停止';
xc = setInterval(function(){
try{
var txt = qrDecode.decodeByDom(video);
var msg = document.createElement("div")
msg.innerHTML = "识别到二维码: " + txt;
document.body.appendChild(msg);
videoStop();
}catch(err){
console.log(err);
}
},300)
videoBut.onclick = videoStop;
}
</script>
</html> </html>

@ -1,32 +0,0 @@
var qrcodeDecode = require('../browser')
document.getElementById('file').onchange = function (event) {
var el = event.target;
if (!el.files.length) return;
var file = el.files[0];
new Promise(function (ok, no) {
if (window.URL && window.URL.createObjectURL) {
ok(window.URL.createObjectURL(file));
} else if (typeof FileReader) {
var reader = new FileReader();
reader.onload = evt => {
ok(evt.target.result);
};
reader.readAsDataURL(file);
} else {
no('浏览器不支持');
}
}).then((src) => {
qrcodeDecode.decodeByUrl(src, function (err, txt) {
var msg = document.createElement("div")
if (err) {
console.log(err);
msg.innerHTML = "err: <br>" + err;
} else {
msg.innerHTML = txt;
}
document.body.appendChild(msg);
})
});
}

14
dist/index.html vendored

@ -1,14 +0,0 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>qrcode-decode</title>
</head>
<body>
<input type="file" name="file" id="file"><br>
<div></div>
</body>
<script type="text/javascript" src="/test.b0eca09c.js"></script>
</html>

17
dist/qr-decode.js vendored

@ -4,10 +4,10 @@
* Released under the ISC License. * Released under the ISC License.
*/ */
(function (global, factory) { (function (global, factory) {
typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) : typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
typeof define === 'function' && define.amd ? define(['exports'], factory) : typeof define === 'function' && define.amd ? define(factory) :
(factory((global.qrDecode = {}))); (global.qrDecode = factory());
}(this, (function (exports) { 'use strict'; }(this, (function () { 'use strict';
function AlignmentPattern(posX, posY, estimatedModuleSize) { function AlignmentPattern(posX, posY, estimatedModuleSize) {
this.x = posX; this.x = posX;
@ -3007,8 +3007,9 @@
var decodeByDom = function decodeByDom(dom) { var decodeByDom = function decodeByDom(dom) {
var canvas = document.createElement("canvas"); var canvas = document.createElement("canvas");
var ctx = canvas.getContext('2d'); var ctx = canvas.getContext('2d');
canvas.width = dom.width; var isVideo = dom.tagName == 'VIDEO';
canvas.height = dom.height; canvas.width = isVideo ? dom.videoWidth : dom.width;
canvas.height = isVideo ? dom.videoHeight : dom.height;
ctx.drawImage(dom, 0, 0, canvas.width, canvas.height); ctx.drawImage(dom, 0, 0, canvas.width, canvas.height);
var data = ctx.getImageData(0, 0, canvas.width, canvas.height); var data = ctx.getImageData(0, 0, canvas.width, canvas.height);
return QRDecode(data); return QRDecode(data);
@ -3034,8 +3035,6 @@
QRDecode.decodeByUrl = decodeByUrl; QRDecode.decodeByUrl = decodeByUrl;
var browser = QRDecode; var browser = QRDecode;
exports.default = browser; return browser;
Object.defineProperty(exports, '__esModule', { value: true });
}))); })));

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

3040
dist/qrcode-decode.js vendored

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

3302
dist/test.b0eca09c.js vendored

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

@ -0,0 +1,6 @@
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="refresh" content="0;url=./demo/" />
</head>
</html>

@ -13,7 +13,7 @@
"scripts": { "scripts": {
"test": "node test/node.js", "test": "node test/node.js",
"demo": "parcel ./demo/index.html", "demo": "parcel ./demo/index.html",
"build": "bili browser.js --format umd,umd-min --banner --exports named" "build": "bili browser.js --format umd,umd-min --banner"
}, },
"repository": { "repository": {
"type": "git", "type": "git",

Loading…
Cancel
Save