Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Update qrcode.js #107

Open
wants to merge 1 commit into
base: master
Choose a base branch
from
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
140 changes: 70 additions & 70 deletions src/qrcode.js
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@
*/


var qrcode = {};
let qrcode = {};
qrcode.imagedata = null;
qrcode.width = 0;
qrcode.height = 0;
Expand Down Expand Up @@ -90,10 +90,10 @@ qrcode.captureToCanvas = function()

qrcode.setWebcam = function(videoId)
{
var n=navigator;
let n=navigator;
qrcode.video=document.getElementById(videoId);

var options = true;
let options = true;
if(navigator.mediaDevices && navigator.mediaDevices.enumerateDevices)
{
try{
Expand Down Expand Up @@ -142,13 +142,13 @@ qrcode.decode = function(src){
{
if(qrcode.canvas_qr2)
{
var canvas_qr = qrcode.canvas_qr2;
var context = qrcode.qrcontext2;
let canvas_qr = qrcode.canvas_qr2;
let context = qrcode.qrcontext2;
}
else
{
var canvas_qr = document.getElementById("qr-canvas");
var context = canvas_qr.getContext('2d');
let canvas_qr = document.getElementById("qr-canvas");
let context = canvas_qr.getContext('2d');
}
qrcode.width = canvas_qr.width;
qrcode.height = canvas_qr.height;
Expand All @@ -160,25 +160,25 @@ qrcode.decode = function(src){
}
else
{
var image = new Image();
let image = new Image();
image.crossOrigin = "Anonymous";
image.onload=function(){
//var canvas_qr = document.getElementById("qr-canvas");
var canvas_out = document.getElementById("out-canvas");
let canvas_out = document.getElementById("out-canvas");
if(canvas_out!=null)
{
var outctx = canvas_out.getContext('2d');
let outctx = canvas_out.getContext('2d');
outctx.clearRect(0, 0, 320, 240);
outctx.drawImage(image, 0, 0, 320, 240);
}

var canvas_qr = document.createElement('canvas');
var context = canvas_qr.getContext('2d');
var nheight = image.height;
var nwidth = image.width;
let canvas_qr = document.createElement('canvas');
let context = canvas_qr.getContext('2d');
let nheight = image.height;
let nwidth = image.width;
if(image.width*image.height>qrcode.maxImgSize)
{
var ir = image.width / image.height;
let ir = image.width / image.height;
nheight = Math.sqrt(qrcode.maxImgSize/ir);
nwidth=ir*nheight;
}
Expand Down Expand Up @@ -221,13 +221,13 @@ qrcode.decode = function(src){

qrcode.isUrl = function(s)
{
var regexp = /(ftp|http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?/;
let regexp = /(ftp|http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?/;
return regexp.test(s);
}

qrcode.decode_url = function (s)
{
var escaped = "";
let escaped = "";
try{
escaped = escape( s );
}
Expand Down Expand Up @@ -258,18 +258,18 @@ qrcode.decode_utf8 = function ( s )

qrcode.process = function(ctx){

var start = new Date().getTime();
let start = new Date().getTime();

var image = qrcode.grayScaleToBitmap(qrcode.grayscale());
let image = qrcode.grayScaleToBitmap(qrcode.grayscale());
//var image = qrcode.binarize(128);

if(qrcode.debug)
{
for (var y = 0; y < qrcode.height; y++)
for (let y = 0; y < qrcode.height; y++)
{
for (var x = 0; x < qrcode.width; x++)
for (let x = 0; x < qrcode.width; x++)
{
var point = (x * 4) + (y * qrcode.width * 4);
let point = (x * 4) + (y * qrcode.width * 4);
qrcode.imagedata.data[point] = image[x+y*qrcode.width]?0:0;
qrcode.imagedata.data[point+1] = image[x+y*qrcode.width]?0:0;
qrcode.imagedata.data[point+2] = image[x+y*qrcode.width]?255:0;
Expand All @@ -280,17 +280,17 @@ qrcode.process = function(ctx){

//var finderPatternInfo = new FinderPatternFinder().findFinderPattern(image);

var detector = new Detector(image);
let detector = new Detector(image);

var qRCodeMatrix = detector.detect();
let qRCodeMatrix = detector.detect();

if(qrcode.debug)
{
for (var y = 0; y < qRCodeMatrix.bits.Height; y++)
for (let y = 0; y < qRCodeMatrix.bits.Height; y++)
{
for (var x = 0; x < qRCodeMatrix.bits.Width; x++)
for (let x = 0; x < qRCodeMatrix.bits.Width; x++)
{
var point = (x * 4*2) + (y*2 * qrcode.width * 4);
let point = (x * 4*2) + (y*2 * qrcode.width * 4);
qrcode.imagedata.data[point] = qRCodeMatrix.bits.get_Renamed(x,y)?0:0;
qrcode.imagedata.data[point+1] = qRCodeMatrix.bits.get_Renamed(x,y)?0:0;
qrcode.imagedata.data[point+2] = qRCodeMatrix.bits.get_Renamed(x,y)?255:0;
Expand All @@ -300,17 +300,17 @@ qrcode.process = function(ctx){
}


var reader = Decoder.decode(qRCodeMatrix.bits);
var data = reader.DataByte;
var str="";
for(var i=0;i<data.length;i++)
let reader = Decoder.decode(qRCodeMatrix.bits);
let data = reader.DataByte;
let str="";
for(let i=0;i<data.length;i++)
{
for(var j=0;j<data[i].length;j++)
for(let j=0;j<data[i].length;j++)
str+=String.fromCharCode(data[i][j]);
}

var end = new Date().getTime();
var time = end - start;
let end = new Date().getTime();
let time = end - start;
console.log(time);

return qrcode.decode_utf8(str);
Expand All @@ -324,18 +324,18 @@ qrcode.getPixel = function(x,y){
if (qrcode.height < y) {
throw "point error";
}
var point = (x * 4) + (y * qrcode.width * 4);
var p = (qrcode.imagedata.data[point]*33 + qrcode.imagedata.data[point + 1]*34 + qrcode.imagedata.data[point + 2]*33)/100;
let point = (x * 4) + (y * qrcode.width * 4);
let p = (qrcode.imagedata.data[point]*33 + qrcode.imagedata.data[point + 1]*34 + qrcode.imagedata.data[point + 2]*33)/100;
return p;
}

qrcode.binarize = function(th){
var ret = new Array(qrcode.width*qrcode.height);
for (var y = 0; y < qrcode.height; y++)
let ret = new Array(qrcode.width*qrcode.height);
for (let y = 0; y < qrcode.height; y++)
{
for (var x = 0; x < qrcode.width; x++)
for (let x = 0; x < qrcode.width; x++)
{
var gray = qrcode.getPixel(x, y);
let gray = qrcode.getPixel(x, y);

ret[x+y*qrcode.width] = gray<=th?true:false;
}
Expand All @@ -345,29 +345,29 @@ qrcode.binarize = function(th){

qrcode.getMiddleBrightnessPerArea=function(image)
{
var numSqrtArea = 4;
let numSqrtArea = 4;
//obtain middle brightness((min + max) / 2) per area
var areaWidth = Math.floor(qrcode.width / numSqrtArea);
var areaHeight = Math.floor(qrcode.height / numSqrtArea);
var minmax = new Array(numSqrtArea);
for (var i = 0; i < numSqrtArea; i++)
let areaWidth = Math.floor(qrcode.width / numSqrtArea);
let areaHeight = Math.floor(qrcode.height / numSqrtArea);
let minmax = new Array(numSqrtArea);
for (let i = 0; i < numSqrtArea; i++)
{
minmax[i] = new Array(numSqrtArea);
for (var i2 = 0; i2 < numSqrtArea; i2++)
for (let i2 = 0; i2 < numSqrtArea; i2++)
{
minmax[i][i2] = new Array(0,0);
}
}
for (var ay = 0; ay < numSqrtArea; ay++)
for (let ay = 0; ay < numSqrtArea; ay++)
{
for (var ax = 0; ax < numSqrtArea; ax++)
for (let ax = 0; ax < numSqrtArea; ax++)
{
minmax[ax][ay][0] = 0xFF;
for (var dy = 0; dy < areaHeight; dy++)
for (let dy = 0; dy < areaHeight; dy++)
{
for (var dx = 0; dx < areaWidth; dx++)
for (let dx = 0; dx < areaWidth; dx++)
{
var target = image[areaWidth * ax + dx+(areaHeight * ay + dy)*qrcode.width];
let target = image[areaWidth * ax + dx+(areaHeight * ay + dy)*qrcode.width];
if (target < minmax[ax][ay][0])
minmax[ax][ay][0] = target;
if (target > minmax[ax][ay][1])
Expand All @@ -377,14 +377,14 @@ qrcode.getMiddleBrightnessPerArea=function(image)
//minmax[ax][ay][0] = (minmax[ax][ay][0] + minmax[ax][ay][1]) / 2;
}
}
var middle = new Array(numSqrtArea);
for (var i3 = 0; i3 < numSqrtArea; i3++)
let middle = new Array(numSqrtArea);
for (let i3 = 0; i3 < numSqrtArea; i3++)
{
middle[i3] = new Array(numSqrtArea);
}
for (var ay = 0; ay < numSqrtArea; ay++)
for (let ay = 0; ay < numSqrtArea; ay++)
{
for (var ax = 0; ax < numSqrtArea; ax++)
for (let ax = 0; ax < numSqrtArea; ax++)
{
middle[ax][ay] = Math.floor((minmax[ax][ay][0] + minmax[ax][ay][1]) / 2);
//Console.out.print(middle[ax][ay] + ",");
Expand All @@ -398,23 +398,23 @@ qrcode.getMiddleBrightnessPerArea=function(image)

qrcode.grayScaleToBitmap=function(grayScale)
{
var middle = qrcode.getMiddleBrightnessPerArea(grayScale);
var sqrtNumArea = middle.length;
var areaWidth = Math.floor(qrcode.width / sqrtNumArea);
var areaHeight = Math.floor(qrcode.height / sqrtNumArea);
let middle = qrcode.getMiddleBrightnessPerArea(grayScale);
let sqrtNumArea = middle.length;
let areaWidth = Math.floor(qrcode.width / sqrtNumArea);
let areaHeight = Math.floor(qrcode.height / sqrtNumArea);

var buff = new ArrayBuffer(qrcode.width*qrcode.height);
var bitmap = new Uint8Array(buff);
let buff = new ArrayBuffer(qrcode.width*qrcode.height);
let bitmap = new Uint8Array(buff);

//var bitmap = new Array(qrcode.height*qrcode.width);

for (var ay = 0; ay < sqrtNumArea; ay++)
for (let ay = 0; ay < sqrtNumArea; ay++)
{
for (var ax = 0; ax < sqrtNumArea; ax++)
for (let ax = 0; ax < sqrtNumArea; ax++)
{
for (var dy = 0; dy < areaHeight; dy++)
for (let dy = 0; dy < areaHeight; dy++)
{
for (var dx = 0; dx < areaWidth; dx++)
for (let dx = 0; dx < areaWidth; dx++)
{
bitmap[areaWidth * ax + dx+ (areaHeight * ay + dy)*qrcode.width] = (grayScale[areaWidth * ax + dx+ (areaHeight * ay + dy)*qrcode.width] < middle[ax][ay])?true:false;
}
Expand All @@ -426,15 +426,15 @@ qrcode.grayScaleToBitmap=function(grayScale)

qrcode.grayscale = function()
{
var buff = new ArrayBuffer(qrcode.width*qrcode.height);
var ret = new Uint8Array(buff);
let buff = new ArrayBuffer(qrcode.width*qrcode.height);
let ret = new Uint8Array(buff);
//var ret = new Array(qrcode.width*qrcode.height);

for (var y = 0; y < qrcode.height; y++)
for (let y = 0; y < qrcode.height; y++)
{
for (var x = 0; x < qrcode.width; x++)
for (let x = 0; x < qrcode.width; x++)
{
var gray = qrcode.getPixel(x, y);
let gray = qrcode.getPixel(x, y);

ret[x+y*qrcode.width] = gray;
}
Expand Down