diff --git a/README.md b/README.md
index 407cd69..52a96e1 100644
--- a/README.md
+++ b/README.md
@@ -7,3 +7,9 @@ All the implementations are based on JIS X 0510:1999.
The word "QR Code" is registered trademark of DENSO WAVE INCORPORATED
http://www.denso-wave.com/qrcode/faqpatent-e.html
+
+----
+
+This repository is a fork of the original with all programming languages.
+It contains **only improvements for the JavaScript implementation**.
+Other files have not been altered or regarded in any way.
diff --git a/js/README.md b/js/README.md
index f68c416..6b9cdd1 100644
--- a/js/README.md
+++ b/js/README.md
@@ -59,6 +59,10 @@ Make a QR Code.
The number of modules(cells) for each orientation.
_[Note] call make() before this function._
+#### getDarkCount() => number
+The total number of modules(cells) that are dark in the final QR code.
+_[Note] call make() before this function._
+
#### isDark(row, col) => boolean
The module at row and col is dark or not.
_[Note] call make() before this function._
@@ -68,6 +72,26 @@ _[Note] call make() before this function._
| row | number
| 0 ~ moduleCount - 1 |
| col | number
| 0 ~ moduleCount - 1 |
+#### getTypeNumber() => number
+Gets the code size type of the final QR code.
+_[Note] call make() before this function._
+
+#### getMaskPattern() => number
+Gets the index of the mask pattern (0 to 7) that was used in the final QR code.
+_[Note] call make() before this function._
+
+#### getBestMaskPattern() => number
+Gets the index of the mask pattern (0 to 7) that would be chosen for the QR code, based on its minimal penalty score.
+_[Note] call make() before this function._
+
+#### getMaskPatternPenaltyScores() => number[]
+Gets the calculated penalty score for each mask pattern. Lower values make better QR codes.
+_[Note] call make() before this function._
+
+#### setMaskPattern(index) => void
+Sets the index of the mask pattern (0 to 7) to use in the final QR code, regardless of which the best pattern would be.
+Default to null, which selects the best pattern automatically.
+
#### setColors(foreground, background) => void
Sets the foreground and background colors for the output formats. Default to black and white, respectively.
_[Note] This has no effect on the ASCII output._
diff --git a/js/miniwebcompiler.json b/js/miniwebcompiler.json
new file mode 100644
index 0000000..5312337
--- /dev/null
+++ b/js/miniwebcompiler.json
@@ -0,0 +1,8 @@
+{
+ "projectName": "qrcode-generator",
+ "files": [
+ {
+ "name": "qrcode.js"
+ }
+ ]
+}
diff --git a/js/qrcode.js b/js/qrcode.js
index 3fe276a..2c5f7d4 100644
--- a/js/qrcode.js
+++ b/js/qrcode.js
@@ -3,6 +3,7 @@
// QR Code Generator for JavaScript
//
// Copyright (c) 2009 Kazuhiko Arase
+// Improved 2020-2021 by Yves Goergen, ygoe.de
//
// URL: http://www.d-project.com/
//
@@ -38,6 +39,10 @@ var qrcode = function () {
let _dataList = [];
let _foreground = "black";
let _background = "white";
+ let _maskPatternOverride = null;
+ let _maskPattern;
+ let _bestMaskPattern;
+ let _maskPatternPenaltyScores = [];
let _this = {};
var makeImpl = function (test, maskPattern) {
@@ -90,19 +95,21 @@ var qrcode = function () {
};
var getBestMaskPattern = function () {
- let minLostPoint = 0;
- let pattern = 0;
+ let minPenaltyScore = 0;
+ let bestPattern = 0;
+ _maskPatternPenaltyScores = [];
for (let i = 0; i < 8; i++) {
makeImpl(true, i);
- let lostPoint = QRUtil.getLostPoint(_this);
- if (i === 0 || minLostPoint > lostPoint) {
- minLostPoint = lostPoint;
- pattern = i;
+ let penaltyScore = QRUtil.getPenaltyScore(_this);
+ _maskPatternPenaltyScores.push(penaltyScore);
+ if (i === 0 || penaltyScore < minPenaltyScore) {
+ minPenaltyScore = penaltyScore;
+ bestPattern = i;
}
}
- return pattern;
+ return bestPattern;
};
var setupTimingPattern = function () {
@@ -276,7 +283,6 @@ var qrcode = function () {
let data = new Array(totalCodeCount);
let index = 0;
-
for (let i = 0; i < maxDcCount; i++) {
for (let r = 0; r < rsBlocks.length; r++) {
if (i < dcdata[r].length) {
@@ -346,7 +352,6 @@ var qrcode = function () {
mode = mode || 'Byte';
let newData = null;
-
switch (mode) {
case 'Numeric':
newData = qrNumber(data);
@@ -379,6 +384,17 @@ var qrcode = function () {
return _moduleCount;
};
+ _this.getDarkCount = function () {
+ let count = 0;
+ for (let row = 0; row < _moduleCount; row++) {
+ for (let col = 0; col < _moduleCount; col++) {
+ if (_modules[row][col])
+ count++;
+ }
+ }
+ return count;
+ };
+
_this.make = function () {
if (_typeNumber < 1) {
let typeNumber = 1;
@@ -407,13 +423,33 @@ var qrcode = function () {
_typeNumber = typeNumber;
}
- makeImpl(false, getBestMaskPattern());
+ _maskPattern = getBestMaskPattern();
+ _bestMaskPattern = _maskPattern;
+ if (_maskPatternOverride !== null)
+ _maskPattern = _maskPatternOverride;
+ makeImpl(false, _maskPattern);
};
_this.getTypeNumber = function () {
return _typeNumber;
};
+ _this.getMaskPattern = function () {
+ return _maskPattern;
+ };
+
+ _this.getBestMaskPattern = function () {
+ return _bestMaskPattern;
+ };
+
+ _this.getMaskPatternPenaltyScores = function () {
+ return _maskPatternPenaltyScores;
+ };
+
+ _this.setMaskPattern = function (maskPattern) {
+ _maskPatternOverride = maskPattern;
+ };
+
_this.setColors = function (foreground, background) {
_foreground = simplifyColor(foreground);
_background = simplifyColor(background);
@@ -426,7 +462,6 @@ var qrcode = function () {
};
_this.createTableTag = function (cellSize, margin) {
-
cellSize = cellSize || 2;
margin = (typeof margin === 'undefined') ? cellSize * 4 : margin;
@@ -479,8 +514,7 @@ var qrcode = function () {
title.id = (title.text) ? title.id || 'qrcode-title' : null;
let size = _this.getModuleCount() * cellSize + margin * 2;
- let c, c2, mc, r, mr, qrSvg = '', rect;
-
+ let qrSvg = '';
qrSvg += '';
return qrSvg;
@@ -955,9 +1113,9 @@ var qrcode = function () {
}
};
- _this.getLostPoint = function (qrcode) {
+ _this.getPenaltyScore = function (qrcode) {
let moduleCount = qrcode.getModuleCount();
- let lostPoint = 0;
+ let penaltyScore = 0;
// LEVEL1
@@ -982,7 +1140,7 @@ var qrcode = function () {
}
if (sameCount > 5) {
- lostPoint += (3 + sameCount - 5);
+ penaltyScore += (3 + sameCount - 5);
}
}
};
@@ -997,7 +1155,7 @@ var qrcode = function () {
if (qrcode.isDark(row, col + 1)) count++;
if (qrcode.isDark(row + 1, col + 1)) count++;
if (count === 0 || count === 4) {
- lostPoint += 3;
+ penaltyScore += 3;
}
}
}
@@ -1013,7 +1171,7 @@ var qrcode = function () {
qrcode.isDark(row, col + 4) &&
!qrcode.isDark(row, col + 5) &&
qrcode.isDark(row, col + 6)) {
- lostPoint += 40;
+ penaltyScore += 40;
}
}
}
@@ -1027,7 +1185,7 @@ var qrcode = function () {
qrcode.isDark(row + 4, col) &&
!qrcode.isDark(row + 5, col) &&
qrcode.isDark(row + 6, col)) {
- lostPoint += 40;
+ penaltyScore += 40;
}
}
}
@@ -1045,8 +1203,8 @@ var qrcode = function () {
}
let ratio = Math.abs(100 * darkCount / moduleCount / moduleCount - 50) / 5;
- lostPoint += ratio * 10;
- return lostPoint;
+ penaltyScore += ratio * 10;
+ return penaltyScore;
};
return _this;
diff --git a/js/qrcode.min.js b/js/qrcode.min.js
new file mode 100644
index 0000000..11500cf
--- /dev/null
+++ b/js/qrcode.min.js
@@ -0,0 +1,2 @@
+var qrcode=function(){var t=function(t,e){let r,n,o=t,i=l[e],u=null,f=0,a=null,c=[],g="black",h="white",s=null,w=[],m={};var b=function(t,e){u=function(t){let e=new Array(t);for(let r=0;r=7&&D(t),null===a&&(a=P(o,i,c)),T(a,e)},L=function(t,e){for(let r=-1;r<=7;r++)if(!(t+r<=-1||t+r>=f))for(let n=-1;n<=7;n++)e+n<=-1||e+n>=f||(u[t+r][e+n]=0<=r&&r<=6&&(0===n||6===n)||0<=n&&n<=6&&(0===r||6===r)||2<=r&&r<=4&&2<=n&&n<=4)},v=function(){for(let t=8;t>r&1);u[Math.floor(r/3)][r%3+f-8-3]=n}for(let r=0;r<18;r++){let n=!t&&1==(e>>r&1);u[r%3+f-8-3][Math.floor(r/3)]=n}},I=function(t,e){let r=i<<3|e,n=d.getBCHTypeInfo(r);for(let e=0;e<15;e++){let r=!t&&1==(n>>e&1);e<6?u[e][8]=r:e<8?u[e+1][8]=r:u[f-15+e][8]=r}for(let e=0;e<15;e++){let r=!t&&1==(n>>e&1);e<8?u[8][f-e-1]=r:e<9?u[8][15-e-1+1]=r:u[8][15-e-1]=r}u[f-8][8]=!t},T=function(t,e){let r=-1,n=f-1,o=7,l=0,i=d.getMaskFunction(e);for(let e=f-1;e>0;e-=2)for(6===e&&(e-=1);;){for(let r=0;r<2;r++)if(null===u[n][e-r]){let f=!1;l>>o&1)),i(n,e-r)&&(f=!f),u[n][e-r]=f,-1===(o-=1)&&(l++,o=7)}if((n+=r)<0||n>=f){n-=r,r=-r;break}}},P=function(t,e,r){let n=y.getRSBlocks(t,e),o=B();for(let e=0;e8*l)throw"code length overflow. ("+o.getLengthInBits()+">"+8*l+")";for(o.getLengthInBits()+4<=8*l&&o.put(0,4);o.getLengthInBits()%8!=0;)o.putBit(!1);for(;!(o.getLengthInBits()>=8*l||(o.put(236,8),o.getLengthInBits()>=8*l));)o.put(17,8);return function(t,e){let r=0,n=0,o=0,l=new Array(e.length),i=new Array(e.length);for(let u=0;u=0?g.getAt(e):0}}let u=0;for(let t=0;t=f||e<0||e>=f)throw t+","+e;return u[t][e]},m.getModuleCount=function(){return f},m.getDarkCount=function(){let t=0;for(let e=0;e';for(let e=0;e";for(let n=0;n';r+=""}return r+=""},m.createSvgTag=function(t,e,r,n){let o={};"object"==typeof arguments[0]&&(t=(o=arguments[0]).cellSize,e=o.margin,r=o.alt,n=o.title),t=t||2,e=void 0===e?4*t:e,(r="string"==typeof r?{text:r}:r||{}).text=r.text||null,r.id=r.text?r.id||"qrcode-description":null,(n="string"==typeof n?{text:n}:n||{}).text=n.text||null,n.id=n.text?n.id||"qrcode-title":null;let l=m.getModuleCount()*t+2*e,i="";i+='"},m.createDataURL=function(t,e){t=t||2,e=void 0===e?4*t:e;let r=m.getModuleCount()*t+2*e,n=e,o=r-e;return x(r,r,g,h,function(e,r){if(n<=e&&e"};var F=function(t){let e="";for(let r=0;r":e+=">";break;case"&":e+="&";break;case'"':e+=""";break;default:e+=n}}return e};return m.createASCII=function(t,e,r){if((t=t||1)<2)return function(t,e){t=void 0===t?2:t;let r,n,o,l,i,u=1*m.getModuleCount()+2*t,f=t,a=u-t,c={"██":"█","█ ":"▀"," █":"▄"," ":" "},g={"██":"▀","█ ":"▀"," █":" "," ":" "},h="";for(r=0;r=a?g[i]:c[i];h+="\n"}return u%2&&t>0?h.substring(0,h.length-u-1)+Array(u+1).join(e?"▀":" "):h.substring(0,h.length-1)}(e,r);t-=1,e=void 0===e?2*t:e/(t+1)*t;let n,o,l,i,u=m.getModuleCount()*t+2*e,f=e,a=u-e,c=" ",g="██";if(r){let t=g;g=c,c=t}let h="",s="";for(n=0;n0&&(t.fillStyle=h,t.fillRect(0,0,n*e+2*r,n*e+2*r));for(let o=0;o>>8),e.push(255&l)):e.push(n)}}return e}};var e=1,r=2,n=4,o=8,l={L:1,M:0,Q:3,H:2},i=0,u=1,f=2,a=3,c=4,g=5,h=6,s=7,d=function(){let t=[[],[6,18],[6,22],[6,26],[6,30],[6,34],[6,22,38],[6,24,42],[6,26,46],[6,28,50],[6,30,54],[6,32,58],[6,34,62],[6,26,46,66],[6,26,48,70],[6,26,50,74],[6,30,54,78],[6,30,56,82],[6,30,58,86],[6,34,62,90],[6,28,50,72,94],[6,26,50,74,98],[6,30,54,78,102],[6,28,54,80,106],[6,32,58,84,110],[6,30,58,86,114],[6,34,62,90,118],[6,26,50,74,98,122],[6,30,54,78,102,126],[6,26,52,78,104,130],[6,30,56,82,108,134],[6,34,60,86,112,138],[6,30,58,86,114,142],[6,34,62,90,118,146],[6,30,54,78,102,126,150],[6,24,50,76,102,128,154],[6,28,54,80,106,132,158],[6,32,58,84,110,136,162],[6,26,54,82,110,138,166],[6,30,58,86,114,142,170]],l={};var d=function(t){let e=0;for(;0!==t;)e++,t>>>=1;return e};return l.getBCHTypeInfo=function(t){let e=t<<10;for(;d(e)-d(1335)>=0;)e^=1335<=0;)e^=7973<5&&(r+=3+l-5)}for(let n=0;n=256;)e-=255;return t[e]}};return r}();function p(t,e){if(void 0===t.length)throw t.length+"/"+e;let r=function(){let r=0;for(;r>>7-e%8&1)},put:function(t,e){for(let n=0;n>>e-n-1&1))},getLengthInBits:function(){return e},putBit:function(r){let n=Math.floor(e/8);t.length<=n&&t.push(0),r&&(t[n]|=128>>>e%8),e++}};return r},k=function(t){let r=e,n=t,o={getMode:function(){return r},getLength:function(t){return n.length},write:function(t){let e=n,r=0;for(;r+2>>8&255)+(255&n),t.put(n,13),r+=2}if(r>>8)},writeBytes:function(t,r,n){r=r||0,n=n||t.length;for(let o=0;o0&&(e+=","),e+=t[r];return e+="]"}};return e},b=function(t){let e=t,r=0,n=0,o=0,l={read:function(){for(;o<8;){if(r>=e.length){if(0===o)return-1;throw"unexpected end of file./"+o}let t=e.charAt(r);if(r++,"="===t)return o=0,-1;t.match(/^\s$/)||(n=n<<6|i(t.charCodeAt(0)),o+=6)}let t=n>>>o-8&255;return o-=8,t}};var i=function(t){if(65<=t&&t<=90)return t-65;if(97<=t&&t<=122)return t-97+26;if(48<=t&&t<=57)return t-48+52;if(43===t)return 62;if(47===t)return 63;throw"c:"+t};return l},x=function(t,e,r,n,o){let l=function(t,e,r,n){let o=t,l=e,i=new Array(t*e),u={};function f(t,e){return(t=t.toLowerCase()).match(/^#[0-9a-f]{3}$/)?[parseInt(t[1]+t[1],16),parseInt(t[2]+t[2],16),parseInt(t[3]+t[3],16)]:t.match(/^#[0-9a-f]{6}$/)?[parseInt(t[1]+t[2],16),parseInt(t[3]+t[4],16),parseInt(t[5]+t[6],16)]:f(e)}u.setPixel=function(t,e,r){i[e*o+t]=r},u.write=function(t){t.writeString("GIF87a"),t.writeShort(o),t.writeShort(l),t.writeByte(128),t.writeByte(0),t.writeByte(0);let e=f(r,"#000");t.writeByte(e[0]),t.writeByte(e[1]),t.writeByte(e[2]);let i=f(n,"#fff");t.writeByte(i[0]),t.writeByte(i[1]),t.writeByte(i[2]),t.writeString(","),t.writeShort(0),t.writeShort(0),t.writeShort(o),t.writeShort(l),t.writeByte(0);let u=a(2);t.writeByte(2);let c=0;for(;u.length-c>255;)t.writeByte(255),t.writeBytes(u,c,255),c+=255;t.writeByte(u.length-c),t.writeBytes(u,c,u.length-c),t.writeByte(0),t.writeString(";")};var a=function(t){let e=1<>>o!=0)throw"length over";for(;r+o>=8;)e.writeByte(255&(t<>>=8-r,n=0,r=0;n|=t<0&&e.writeByte(n)}};return o}(l);u.write(e,n);let f=0,a=String.fromCharCode(i[f]);for(f++;f=6;)l(t>>>e-6),e-=6},o.flush=function(){if(e>0&&(l(t<<6-e),t=0,e=0),r%3!=0){let t=3-r%3;for(let e=0;e>6,128|63&n):n<55296||n>=57344?e.push(224|n>>12,128|n>>6&63,128|63&n):(r++,n=65536+((1023&n)<<10|1023&t.charCodeAt(r)),e.push(240|n>>18,128|n>>12&63,128|n>>6&63,128|63&n))}return e}(t)},function(t){"function"==typeof define&&define.amd?define([],t):"object"==typeof exports&&(module.exports=t())}(function(){return qrcode});
+//# sourceMappingURL=qrcode.min.js.map
\ No newline at end of file
diff --git a/js/qrcode.min.js.map b/js/qrcode.min.js.map
new file mode 100644
index 0000000..343cb92
--- /dev/null
+++ b/js/qrcode.min.js.map
@@ -0,0 +1 @@
+{"version":3,"sources":["qrcode.js"],"names":["qrcode","typeNumber","errorCorrectionLevel","_maskPattern","_bestMaskPattern","_typeNumber","_errorCorrectionLevel","QRErrorCorrectionLevel","_modules","_moduleCount","_dataCache","_dataList","_foreground","_background","_maskPatternOverride","_maskPatternPenaltyScores","_this","makeImpl","test","maskPattern","moduleCount","modules","Array","row","col","setupPositionProbePattern","setupPositionAdjustPattern","setupTimingPattern","setupTypeInfo","setupTypeNumber","createData","mapData","r","c","pos","QRUtil","getPatternPosition","i","length","j","bits","getBCHTypeNumber","mod","Math","floor","data","getBCHTypeInfo","inc","bitIndex","byteIndex","maskFunc","getMaskFunction","dark","dataList","rsBlocks","QRRSBlock","getRSBlocks","buffer","qrBitBuffer","put","getMode","getLength","getLengthInBits","write","totalDataCount","dataCount","putBit","offset","maxDcCount","maxEcCount","dcdata","ecdata","dcCount","ecCount","totalCount","max","getBuffer","rsPoly","getErrorCorrectPolynomial","modPoly","qrPolynomial","modIndex","getAt","totalCodeCount","index","createBytes","addData","mode","newData","qrNumber","qrAlphaNum","qr8BitByte","qrKanji","push","isDark","getModuleCount","getDarkCount","count","make","minPenaltyScore","bestPattern","penaltyScore","getPenaltyScore","getBestMaskPattern","getTypeNumber","getMaskPattern","getMaskPatternPenaltyScores","setMaskPattern","setColors","foreground","background","simplifyColor","match","createTableTag","cellSize","margin","qrHtml","createSvgTag","alt","title","opts","arguments","text","id","size","qrSvg","scalable","escapeXml","join","trim","drawn","pointEquals","a","b","edges","x0","y0","x1","y1","splice","polygons","polygon","edge","foundEdge","p1","p2","p3","Error","point","k","polygon2","l","apply","concat","slice","d","createDataURL","min","x","y","createImgTag","img","s","escaped","charAt","createASCII","inverted","r1","r2","p","blocks","\u2588\u2588","\u2588 "," \u2588"," ","blocksLastLineNoMargin","ascii","substring","_createHalfASCII","white","black","line","renderTo2dContext","context","fillStyle","fillRect","stringToBytes","stringToBytesFuncs","default","bytes","charCodeAt","createStringToBytes","unicodeData","numChars","unicodeMap","bin","base64DecodeInputStream","read","b0","b1","v","String","fromCharCode","unknownChar","QRMode","L","M","Q","H","QRMaskPattern","PATTERN_POSITION_TABLE","getBCHDigit","digit","errorCorrectLength","multiply","QRMath","gexp","type","sameCount","darkCount","abs","EXP_TABLE","LOG_TABLE","glog","n","num","shift","_num","e","ratio","RS_BLOCK_TABLE","qrRSBlock","rsBlock","getRsBlockTable","list","_buffer","_length","bufIndex","bit","_mode","_data","strToNum","charToNum","getCode","_bytes","code","byteArrayOutputStream","writeByte","writeShort","writeBytes","off","len","writeString","toByteArray","toString","str","_str","_pos","_buflen","decode","width","height","getPixel","gif","_width","_height","parseColor","fallback","toLowerCase","parseInt","setPixel","pixel","out","fg","bg","raster","getLZWRaster","lzwMinCodeSize","clearCode","endCode","bitLength","table","lzwTable","add","byteOut","bitOut","_out","_bitLength","_bitBuffer","flush","bitOutputStream","dataIndex","contains","indexOf","_map","_size","key","gifImage","base64","_base64","writeEncoded","encode","padlen","base64EncodeOutputStream","utf8","charcode","toUTF8Array","factory","define","amd","exports","module"],"mappings":"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"}
\ No newline at end of file
diff --git a/js/sample.html b/js/sample.html
index 90ec81e..5c6a484 100644
--- a/js/sample.html
+++ b/js/sample.html
@@ -3,15 +3,10 @@
-
+
-
-
-
+
+
QR Code Generator for JavaScript
@@ -22,6 +17,8 @@ QR Code Generator for JavaScript
Image type:
@@ -77,7 +66,71 @@
QR Code Generator for JavaScript
Size type:
-
+
+
+
+ Error correction level:
+
+
+ Mask pattern:
+
diff --git a/js/sample.js b/js/sample.js
index 111f5b4..7a71869 100644
--- a/js/sample.js
+++ b/js/sample.js
@@ -1,21 +1,8 @@
var downloadFileName, downloadType, downloadData;
var body_loadHander = function () {
- var crtOpt = function (value, label) {
- let opt = document.createElement('option');
- opt.appendChild(document.createTextNode(label));
- opt.value = value;
- return opt;
- };
-
- let t = document.forms['qrForm'].elements['t'];
- t.appendChild(crtOpt('' + 0, 'Auto'));
- for (let i = 1; i <= 40; i += 1) {
- t.appendChild(crtOpt('' + i, '' + i));
- }
- t.value = '0';
-
let form = document.forms['qrForm'];
+ form.elements['trim'].addEventListener("click", update_qrcode);
form.elements['msg'].addEventListener("input", update_qrcode);
form.elements['t'].addEventListener("change", update_qrcode);
form.elements['cellsize'].addEventListener("input", update_qrcode);
@@ -26,6 +13,7 @@ var body_loadHander = function () {
form.elements['format'].addEventListener("change", update_qrcode);
form.elements['foreground'].addEventListener("change", update_qrcode);
form.elements['background'].addEventListener("change", update_qrcode);
+ form.elements['mask'].addEventListener("change", update_qrcode);
update_qrcode();
document.getElementById("download").addEventListener("click", function () {
@@ -38,7 +26,7 @@ var draw_qrcode = function (text, typeNumber, errorCorrectionLevel) {
document.write(create_qrcode(text, typeNumber, errorCorrectionLevel));
};
-var create_qrcode = function (text, typeNumber, cellsize, padding, errorCorrectionLevel, mode, mb, format, fg, bg) {
+var create_qrcode = function (text, typeNumber, cellsize, padding, errorCorrectionLevel, mode, mb, format, fg, bg, mask) {
if (!mode) {
if (text.match(/^[0-9]+$/))
mode = "Numeric";
@@ -65,14 +53,35 @@ var create_qrcode = function (text, typeNumber, cellsize, padding, errorCorrecti
qrcode.stringToBytes = qrcode.stringToBytesFuncs[mb];
let qr = qrcode(typeNumber || 0, errorCorrectionLevel || 'M');
+ if (mask > 0)
+ qr.setMaskPattern(mask - 1);
qr.addData(text, mode);
qr.make();
qr.setColors(fg, bg);
+ let maskPattern = qr.getMaskPattern();
+ let bestMaskPattern = qr.getBestMaskPattern();
+ let scores = qr.getMaskPatternPenaltyScores();
+ let minScore = Math.min.apply(null, scores);
+ let maskField = document.forms['qrForm'].elements['mask'];
+ for (let i = 0; i <= 8; i++) {
+ if (i === 0) {
+ maskField.children[i].textContent = "Best (" + (bestMaskPattern + 1) + ")";
+ }
+ else if (scores[i - 1] === minScore) {
+ maskField.children[i].textContent = i + " (best)";
+ }
+ else {
+ let worse = scores[i - 1] / minScore - 1;
+ maskField.children[i].textContent = i + " (" + (Math.round(worse * 1000) / 10) + "% worse)";
+ }
+ }
+
let size = qr.getModuleCount() * cellsize + padding * 2;
info.innerHTML = "Size type: " + qr.getTypeNumber() + ", " +
"code columns: " + qr.getModuleCount() + ", " +
- "image size: " + size + "x" + size + " px";
+ "filled blocks: " + qr.getDarkCount() + " (" + Math.round(qr.getDarkCount() / (qr.getModuleCount() * qr.getModuleCount()) * 100) + "%)
" +
+ "Image size: " + size + "x" + size + " px";
switch (format) {
case "svg":
@@ -126,6 +135,7 @@ var create_qrcode = function (text, typeNumber, cellsize, padding, errorCorrecti
}
}
catch (error) {
+ console.error(error);
info.innerHTML = "Error: " + error;
return "";
}
@@ -133,7 +143,10 @@ var create_qrcode = function (text, typeNumber, cellsize, padding, errorCorrecti
var update_qrcode = function () {
let form = document.forms['qrForm'];
- let text = form.elements['msg'].value.replace(/^[\s\u3000]+|[\s\u3000]+$/g, '');
+ let trim = form.elements['trim'].checked;
+ let text = form.elements['msg'].value;
+ if (trim)
+ text = text.replace(/^[\s\u3000]+|[\s\u3000]+$/g, ''); // U+3000 Ideographic Space
let t = form.elements['t'].value;
let cellsize = +form.elements['cellsize'].value;
let padding = +form.elements['padding'].value * cellsize;
@@ -143,8 +156,9 @@ var update_qrcode = function () {
let format = form.elements['format'].value;
let fg = form.elements['foreground'].value;
let bg = form.elements['background'].value;
+ let mask = form.elements['mask'].value;
document.getElementById("length").innerHTML = "(" + text.length + " characters)";
- document.getElementById('qr').innerHTML = create_qrcode(text, t, cellsize, padding, e, m, mb, format, fg, bg);
+ document.getElementById('qr').innerHTML = create_qrcode(text, t, cellsize, padding, e, m, mb, format, fg, bg, mask);
};
// Source: https://ourcodeworld.com/articles/read/189/how-to-create-a-file-and-generate-a-download-with-javascript-in-the-browser-without-a-server