master
cnwhy 7 years ago
parent 518ed4af94
commit dc74dd877c

@ -1,9 +1,11 @@
# qrcode-decode
时要的二维码识别代码整理自 [jsqrcode](https://github.com/LazarSoft/jsqrcode);
解密/识别 QRCode码
说明: 主要的二维码识别代码整理自 [jsqrcode](https://github.com/LazarSoft/jsqrcode);
**修改点:**
1. 模块化
2. 剥离识别函数,改成适合服务端使用,但入参数还是保留为实现[ImageData](https://developer.mozilla.org/zh-CN/docs/Web/API/ImageData)接口的对像
2. 剥离识别函数,改成适合服务端使用,但入参数还是保留为[ImageData](https://developer.mozilla.org/zh-CN/docs/Web/API/ImageData)
**关于 `ImageData`**
> `Canvas` 中可以用 `ctx.getImageData` 方法得到;
@ -13,6 +15,23 @@
- `server.js` 服务端项目 提供两个API `decodeByPath`, `decodeByBuffer`
> 服务端当前支持 `bmp` , `jpg` , `png` , `gif` 格式;
## install
```
npm i qrcode-decode
```
## import
```js
var qrDecode = require('qrcode-decode');
//web
var qr_web = require('qrcode-decode/browser')
//node
var qr_node = require('qrcode-decode/server')
var text = qrDecode(dataImage);
```
> 浏览器直接引用请使用 `./dist` 目录下的文件
## demo
### web
> web端最终是利用`Canvas`获取`ImageData`, 注意兼容及跨域问题
@ -33,7 +52,7 @@ qrcodeDecode.decodeByDom(img, function (err, txt) {
```
### nodejs
> 注意: 服务器端API是以 `promise` 返回结果,你注意你的`node`版本;
> 注意: 服务器端API是以 `promise` 返回结果, 你注意你的`node`版本;
```js
//解析文件
var qrcodeDecode = require('qrcode-decode/server');

@ -1,5 +1,5 @@
var decode = require('./src/QRCodeDecode');
var qrDecode = require('./src/QRCodeDecode');
var decodeByDom = function (dom) {
var canvas = document.createElement("canvas")
var ctx = canvas.getContext('2d')
@ -7,7 +7,7 @@ var decodeByDom = function (dom) {
canvas.height = dom.height;
ctx.drawImage(dom, 0, 0, canvas.width, canvas.height);
var data = ctx.getImageData(0, 0, canvas.width, canvas.height);
return decode(data)
return qrDecode(data)
}
var decodeByUrl = (src, cb) => {
@ -24,8 +24,6 @@ var decodeByUrl = (src, cb) => {
img.onerror = cb;
}
module.exports = {
decodeByImageDate: decode,
decodeByDom: decodeByDom,
decodeByUrl: decodeByUrl
}
qrDecode.decodeByDom = decodeByDom;
qrDecode.decodeByUrl = decodeByUrl;
module.exports = qrDecode;

@ -10,5 +10,5 @@
<input type="file" name="file" id="file"><br>
<div></div>
</body>
<script type="text/javascript" src="test.1.js"></script>
<script type="text/javascript" src="test.js"></script>
</html>

@ -3029,19 +3029,11 @@
img.onerror = cb;
};
var browser = {
decodeByImageDate: QRCodeDecode,
decodeByDom: decodeByDom,
decodeByUrl: decodeByUrl
};
var browser_1 = browser.decodeByImageDate;
var browser_2 = browser.decodeByDom;
var browser_3 = browser.decodeByUrl;
QRCodeDecode.decodeByDom = decodeByDom;
QRCodeDecode.decodeByUrl = decodeByUrl;
var browser = QRCodeDecode;
exports.default = browser;
exports.decodeByImageDate = browser_1;
exports.decodeByDom = browser_2;
exports.decodeByUrl = browser_3;
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

@ -3,6 +3,13 @@
"version": "0.0.1",
"description": "QRCode parser/decode",
"main": "src/QRCodeDecode.js",
"files": [
"README.md",
"browser.js",
"server.js",
"src/*",
"dist/*"
],
"scripts": {
"test": "node test/node.js",
"demo": "parcel ./demo/index.html",

@ -24,9 +24,7 @@ function decodeByBuffer(buffer, options) {
res(imgDecode.png(buffer));
break;
case 'gif':
// var t1 = Date.now();
res(imgDecode.gif1(buffer));
// console.log('gif: ',Date.now() - t1);
res(imgDecode.gif(buffer));
break;
default:
if (type) {
@ -87,8 +85,7 @@ function decodeByPath(path,options) {
})
}
module.exports = {
decodeByBuffer: decodeByBuffer,
decodeByPath: decodeByPath,
decodeByImageData: qrDecode
}
qrDecode.decodeByBuffer = decodeByBuffer;
qrDecode.decodeByPath = decodeByPath;
module.exports = qrDecode;
Loading…
Cancel
Save