First Commit
This commit is contained in:
121
qr/qr.js
Normal file
121
qr/qr.js
Normal file
@ -0,0 +1,121 @@
|
||||
"use strict";
|
||||
|
||||
var Readable = require('stream').Readable;
|
||||
|
||||
var QR = require('./qr-base').QR;
|
||||
var png = require('./png');
|
||||
var vector = require('./vector');
|
||||
|
||||
var fn_noop = function() {};
|
||||
|
||||
var BITMAP_OPTIONS = {
|
||||
parse_url: false,
|
||||
ec_level: 'M',
|
||||
size: 5,
|
||||
margin: 4,
|
||||
customize: null
|
||||
};
|
||||
|
||||
var VECTOR_OPTIONS = {
|
||||
parse_url: false,
|
||||
ec_level: 'M',
|
||||
margin: 1,
|
||||
size: 0
|
||||
};
|
||||
|
||||
function get_options(options, force_type) {
|
||||
if (typeof options === 'string') {
|
||||
options = { 'ec_level': options }
|
||||
} else {
|
||||
options = options || {};
|
||||
}
|
||||
var _options = {
|
||||
type: String(force_type || options.type || 'png').toLowerCase()
|
||||
};
|
||||
|
||||
var defaults = _options.type == 'png' ? BITMAP_OPTIONS : VECTOR_OPTIONS;
|
||||
|
||||
for (var k in defaults) {
|
||||
_options[k] = k in options ? options[k] : defaults[k];
|
||||
}
|
||||
|
||||
return _options;
|
||||
}
|
||||
|
||||
function qr_image(text, options) {
|
||||
options = get_options(options);
|
||||
|
||||
var matrix = QR(text, options.ec_level, options.parse_url);
|
||||
var stream = new Readable();
|
||||
stream._read = fn_noop;
|
||||
|
||||
switch (options.type) {
|
||||
case 'svg':
|
||||
case 'pdf':
|
||||
case 'eps':
|
||||
process.nextTick(function() {
|
||||
vector[options.type](matrix, stream, options.margin, options.size);
|
||||
});
|
||||
break;
|
||||
case 'svgpath':
|
||||
// deprecated, use svg_object method
|
||||
process.nextTick(function() {
|
||||
var obj = vector.svg_object(matrix, options.margin, options.size);
|
||||
stream.push(obj.path);
|
||||
stream.push(null);
|
||||
});
|
||||
break;
|
||||
case 'png':
|
||||
default:
|
||||
process.nextTick(function() {
|
||||
var bitmap = png.bitmap(matrix, options.size, options.margin);
|
||||
if (options.customize) {
|
||||
options.customize(bitmap);
|
||||
}
|
||||
png.png(bitmap, stream);
|
||||
});
|
||||
}
|
||||
|
||||
return stream;
|
||||
}
|
||||
|
||||
function qr_image_sync(text, options) {
|
||||
options = get_options(options);
|
||||
|
||||
var matrix = QR(text, options.ec_level, options.parse_url);
|
||||
var stream = [];
|
||||
var result;
|
||||
|
||||
switch (options.type) {
|
||||
case 'svg':
|
||||
case 'pdf':
|
||||
case 'eps':
|
||||
vector[options.type](matrix, stream, options.margin, options.size);
|
||||
result = stream.filter(Boolean).join('');
|
||||
break;
|
||||
case 'png':
|
||||
default:
|
||||
var bitmap = png.bitmap(matrix, options.size, options.margin);
|
||||
if (options.customize) {
|
||||
options.customize(bitmap);
|
||||
}
|
||||
png.png(bitmap, stream);
|
||||
result = Buffer.concat(stream.filter(Boolean));
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
function svg_object(text, options) {
|
||||
options = get_options(options, 'svg');
|
||||
|
||||
var matrix = QR(text, options.ec_level);
|
||||
return vector.svg_object(matrix, options.margin);
|
||||
}
|
||||
|
||||
module.exports = {
|
||||
matrix: QR,
|
||||
image: qr_image,
|
||||
imageSync: qr_image_sync,
|
||||
svgObject: svg_object
|
||||
};
|
Reference in New Issue
Block a user