Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
46 changes: 24 additions & 22 deletions src/qrcode.js
Original file line number Diff line number Diff line change
Expand Up @@ -111,7 +111,9 @@ QrCode.prototype.decode_utf8 = function(s) {

QrCode.prototype.process = function(imageData) {

var start = new Date().getTime();
if (this.debug) {
var start = Date.now();
}

var image = this.grayScaleToBitmap(this.grayscale(imageData));

Expand All @@ -138,28 +140,26 @@ QrCode.prototype.process = function(imageData) {
str += String.fromCharCode(data[i][j]);
}

var end = new Date().getTime();
var time = end - start;
if (this.debug) {
var end = Date.now();
var time = end - start;

console.log('QR Code processing time (ms): ' + time);
}

return {result: this.decode_utf8(str), points: qRCodeMatrix.points};
};

QrCode.prototype.getPixel = function(imageData, x, y) {
if (imageData.width < x) {
throw "point error";
}
if (imageData.height < y) {
if (imageData.width < x || imageData.height < y) {
throw "point error";
}
var point = (x * 4) + (y * imageData.width * 4);
return (imageData.data[point] * 33 + imageData.data[point + 1] * 34 + imageData.data[point + 2] * 33) / 100;
};

QrCode.prototype.binarize = function(th) {
var ret = new Array(this.width * this.height);
var ret = new Uint8ClampedArray(this.width * this.height);
for (var y = 0; y < this.height; y++) {
for (var x = 0; x < this.width; x++) {
var gray = this.getPixel(x, y);
Expand All @@ -173,11 +173,11 @@ QrCode.prototype.binarize = function(th) {
QrCode.prototype.getMiddleBrightnessPerArea = function(imageData) {
var numSqrtArea = 4;
//obtain middle brightness((min + max) / 2) per area
var areaWidth = Math.floor(imageData.width / numSqrtArea);
var areaHeight = Math.floor(imageData.height / numSqrtArea);
var minmax = new Array(numSqrtArea);
var areaWidth = (imageData.width / numSqrtArea) | 0;
var areaHeight = (imageData.height / numSqrtArea) | 0;
var minmax = [];
for (var i = 0; i < numSqrtArea; i++) {
minmax[i] = new Array(numSqrtArea);
minmax[i] = [];
for (var i2 = 0; i2 < numSqrtArea; i2++) {
minmax[i][i2] = [0, 0];
}
Expand All @@ -196,13 +196,13 @@ QrCode.prototype.getMiddleBrightnessPerArea = function(imageData) {
}
}
}
var middle = new Array(numSqrtArea);
var middle = [];
for (var i3 = 0; i3 < numSqrtArea; i3++) {
middle[i3] = new Array(numSqrtArea);
middle[i3] = [];
}
for (var ay = 0; ay < numSqrtArea; ay++) {
for (var ax = 0; ax < numSqrtArea; ax++) {
middle[ax][ay] = Math.floor((minmax[ax][ay][0] + minmax[ax][ay][1]) / 2);
middle[ax][ay] = ((minmax[ax][ay][0] + minmax[ax][ay][1]) / 2) | 0;
}
}

Expand All @@ -212,13 +212,15 @@ QrCode.prototype.getMiddleBrightnessPerArea = function(imageData) {
QrCode.prototype.grayScaleToBitmap = function(grayScaleImageData) {
var middle = this.getMiddleBrightnessPerArea(grayScaleImageData);
var sqrtNumArea = middle.length;
var areaWidth = Math.floor(grayScaleImageData.width / sqrtNumArea);
var areaHeight = Math.floor(grayScaleImageData.height / sqrtNumArea);
var areaWidth = (grayScaleImageData.width / sqrtNumArea) | 0;
var areaHeight = (grayScaleImageData.height / sqrtNumArea) | 0;

for (var ay = 0; ay < sqrtNumArea; ay++) {
for (var ax = 0; ax < sqrtNumArea; ax++) {
for (var dy = 0; dy < areaHeight; dy++) {
for (var dx = 0; dx < areaWidth; dx++) {
var ay, ax, dy, dx;

for (ay = 0; ay < sqrtNumArea; ay++) {
for (ax = 0; ax < sqrtNumArea; ax++) {
for (dy = 0; dy < areaHeight; dy++) {
for (dx = 0; dx < areaWidth; dx++) {
grayScaleImageData.data[areaWidth * ax + dx + (areaHeight * ay + dy) * grayScaleImageData.width] = (grayScaleImageData.data[areaWidth * ax + dx + (areaHeight * ay + dy) * grayScaleImageData.width] < middle[ax][ay]);
}
}
Expand All @@ -228,7 +230,7 @@ QrCode.prototype.grayScaleToBitmap = function(grayScaleImageData) {
};

QrCode.prototype.grayscale = function(imageData) {
var ret = new Array(imageData.width * imageData.height);
var ret = new Uint8ClampedArray(imageData.width * imageData.height);

for (var y = 0; y < imageData.height; y++) {
for (var x = 0; x < imageData.width; x++) {
Expand Down