You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
QRCode-decode/server.js

94 lines
2.2 KiB
JavaScript

7 years ago
var fs = require('fs')
var imgDecode = require('./src/imageDecode')
var imgType = require('image-type')
var qrDecode = require('./')
// var jpg = require('./src/imageDecode/jpg');
7 years ago
/**
* 通过Buffer识别二维码
* @param {buufer} buffer 文件的Buffer
*/
function decodeByBuffer(buffer,debug) {
7 years ago
var type;
return new Promise(function (res, rej) {
type = (imgType(buffer) || {}).ext;
switch (type) {
case 'bmp':
res(imgDecode.bmp(buffer));
break;
case 'jpg':
res(imgDecode.jpg(buffer));
break;
case 'png':
res(imgDecode.png(buffer));
break;
case 'gif':
// var t1 = Date.now();
res(imgDecode.gif1(buffer));
// console.log('gif: ',Date.now() - t1);
break;
default:
if (type) {
throw 'Support for this type! type as ' + type
}
throw 'not image!'
}
}).then(function (imageData) {
7 years ago
if (type == 'gif' || type == 'png') {
7 years ago
return new Promise(function (res, rej) {
var errList = [];
var images = imageData;
var onerr = function (e) {
errList.push(e);
if (errList.length < images.length) return;
rej('解码失败!')
}
7 years ago
debug && console.log('length',imageData.length)
7 years ago
if (imageData.length <= 0) {
rej('解码失败!')
} else if (imageData.length > 3) {
images = [];
var l = 1;
var i = 0;
while ( Math.pow(2,++l) < imageData.length){
}
// console.log('l:',l)
var sp = (imageData.length-1)/l;
// console.log('sp:',sp)
do{
// console.log(Math.floor(i*sp));
images.push(imageData[Math.floor(i*sp)])
}while(i++<l)
}
7 years ago
debug && console.log(images.length)
7 years ago
images.forEach(function (v) {
setTimeout(function () {
try {
res(qrDecode(v));
} catch (e) {
7 years ago
debug && console.log(e);
7 years ago
onerr(e)
}
}, 0)
})
})
}
return qrDecode(imageData);
})
}
7 years ago
/**
* 识别二维码图片文件
* @param {String} path 文件路径
*/
exports.decodeByPath = function (path) {
7 years ago
return new Promise(function (res, rej) {
fs.readFile(path, function (err, buffer) {
if (err) { return rej(err) }
7 years ago
res(decodeByBuffer(buffer));
7 years ago
})
})
}
7 years ago
exports.decodeByBuffer = decodeByBuffer;
exports.decodeByImageData = qrDecode;