qrcode-matrix 0.2.1 → 1.0.0-beta.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (54) hide show
  1. package/README.md +42 -36
  2. package/dist/qrcodeMatrix.umd.js +1298 -1297
  3. package/dist/qrcodeMatrix.umd.min.js +6 -0
  4. package/lib/encode/sjis.d.ts +2 -2
  5. package/lib/encode/sjisData.d.ts +2 -2
  6. package/lib/encode/utf-8.d.ts +2 -2
  7. package/lib/index.d.ts +5 -5
  8. package/lib/lib/BitBuffer.d.ts +9 -9
  9. package/lib/lib/QRMatrix.d.ts +10 -10
  10. package/lib/lib/bch-encode.d.ts +31 -31
  11. package/lib/lib/draw.d.ts +4 -4
  12. package/lib/modes/Alphanumeric.d.ts +3 -3
  13. package/lib/modes/Byte.d.ts +3 -3
  14. package/lib/modes/Kanji.d.ts +3 -3
  15. package/lib/modes/Numeric.d.ts +3 -3
  16. package/lib/modes/mode.d.ts +6 -6
  17. package/lib/qrcode.d.ts +19 -19
  18. package/{dist → lib}/qrcodeMatrix.es.js +1296 -1295
  19. package/{dist → lib}/qrcodeMatrix.js +1301 -1294
  20. package/lib/utils.d.ts +26 -26
  21. package/package.json +7 -8
  22. package/LICENSE +0 -21
  23. package/lib/encode/sjis.js +0 -113
  24. package/lib/encode/sjisData.js +0 -4
  25. package/lib/encode/utf-8.js +0 -23
  26. package/lib/index.js +0 -37
  27. package/lib/lib/BitBuffer.js +0 -39
  28. package/lib/lib/QRMatrix.js +0 -31
  29. package/lib/lib/bch-encode.js +0 -466
  30. package/lib/lib/draw.js +0 -49
  31. package/lib/modes/Alphanumeric.js +0 -49
  32. package/lib/modes/Byte.js +0 -25
  33. package/lib/modes/Kanji.js +0 -46
  34. package/lib/modes/Numeric.js +0 -43
  35. package/lib/modes/mode.js +0 -2
  36. package/lib/qrcode.js +0 -124
  37. package/lib/utils.js +0 -379
  38. package/src/.DS_Store +0 -0
  39. package/src/encode/.DS_Store +0 -0
  40. package/src/encode/sjis.ts +0 -121
  41. package/src/encode/sjisData.ts +0 -2
  42. package/src/encode/utf-8.ts +0 -30
  43. package/src/index.ts +0 -33
  44. package/src/lib/BitBuffer.ts +0 -70
  45. package/src/lib/QRMatrix.ts +0 -39
  46. package/src/lib/bch-encode.ts +0 -639
  47. package/src/lib/draw.ts +0 -77
  48. package/src/modes/Alphanumeric.ts +0 -55
  49. package/src/modes/Byte.ts +0 -30
  50. package/src/modes/Kanji.ts +0 -56
  51. package/src/modes/Numeric.ts +0 -47
  52. package/src/modes/mode.ts +0 -6
  53. package/src/qrcode.ts +0 -237
  54. package/src/utils.ts +0 -459
package/src/utils.ts DELETED
@@ -1,459 +0,0 @@
1
- // var bch = require('./bch');
2
- import BitMatrix from 'bitmatrix/lib/BitMatrix';
3
- import BitBuffer from './lib/BitBuffer';
4
- import QRMatrix from './lib/QRMatrix';
5
- import {fillRect, rectBorder} from './lib/draw'
6
- import {
7
- QRErrorCorrectionLevel,
8
- QRMode,
9
- getBCHTypeInfo,
10
- getRSBlocks,
11
- getBCHTypeNumber,
12
- getLengthInBits,
13
- getBufferForModes,
14
- getMaxDataCount,
15
- createData
16
- } from './lib/bch-encode';
17
-
18
-
19
- const QRMaskPattern = {
20
- PATTERN000: 0,
21
- PATTERN001: 1,
22
- PATTERN010: 2,
23
- PATTERN011: 3,
24
- PATTERN100: 4,
25
- PATTERN101: 5,
26
- PATTERN110: 6,
27
- PATTERN111: 7
28
- };
29
-
30
- const PATTERN_POSITION_TABLE: Uint8Array[] = [
31
- [],
32
- [6, 18],
33
- [6, 22],
34
- [6, 26],
35
- [6, 30],
36
- [6, 34],
37
- [6, 22, 38],
38
- [6, 24, 42],
39
- [6, 26, 46],
40
- [6, 28, 50],
41
- [6, 30, 54],
42
- [6, 32, 58],
43
- [6, 34, 62],
44
- [6, 26, 46, 66],
45
- [6, 26, 48, 70],
46
- [6, 26, 50, 74],
47
- [6, 30, 54, 78],
48
- [6, 30, 56, 82],
49
- [6, 30, 58, 86],
50
- [6, 34, 62, 90],
51
- [6, 28, 50, 72, 94],
52
- [6, 26, 50, 74, 98],
53
- [6, 30, 54, 78, 102],
54
- [6, 28, 54, 80, 106],
55
- [6, 32, 58, 84, 110],
56
- [6, 30, 58, 86, 114],
57
- [6, 34, 62, 90, 118],
58
- [6, 26, 50, 74, 98, 122],
59
- [6, 30, 54, 78, 102, 126],
60
- [6, 26, 52, 78, 104, 130],
61
- [6, 30, 56, 82, 108, 134],
62
- [6, 34, 60, 86, 112, 138],
63
- [6, 30, 58, 86, 114, 142],
64
- [6, 34, 62, 90, 118, 146],
65
- [6, 30, 54, 78, 102, 126, 150],
66
- [6, 24, 50, 76, 102, 128, 154],
67
- [6, 28, 54, 80, 106, 132, 158],
68
- [6, 32, 58, 84, 110, 136, 162],
69
- [6, 26, 54, 82, 110, 138, 166],
70
- [6, 30, 58, 86, 114, 142, 170]
71
- ].map(v => new Uint8Array(v));
72
-
73
- // 获取掩模函数
74
- const getQRMaskFunction: (a: number) => (a: number, b: number) => boolean = (function() {
75
- const QRMaskFunctions: ((a: number, b: number) => boolean)[] = [
76
- function(i: number, j: number) {
77
- return (i + j) % 2 == 0;
78
- },
79
- function(i: number, j: number) {
80
- return i % 2 == 0;
81
- },
82
- function(i: number, j: number) {
83
- return j % 3 == 0;
84
- },
85
- function(i: number, j: number) {
86
- return (i + j) % 3 == 0;
87
- },
88
- function(i: number, j: number) {
89
- return (Math.floor(i / 2) + Math.floor(j / 3)) % 2 == 0;
90
- },
91
- function(i: number, j: number) {
92
- return ((i * j) % 2) + ((i * j) % 3) == 0;
93
- },
94
- function(i: number, j: number) {
95
- return (((i * j) % 2) + ((i * j) % 3)) % 2 == 0;
96
- },
97
- function(i: number, j: number) {
98
- return (((i * j) % 3) + ((i + j) % 2)) % 2 == 0;
99
- }
100
- ];
101
- return function(maskPattern: number) {
102
- var fn = QRMaskFunctions[maskPattern];
103
- if (!fn) throw new Error('maskPattern:' + maskPattern);
104
- return fn;
105
- };
106
- })();
107
-
108
- // 通过size反推QR码版本
109
- function size2TypeNumber(size: number) {
110
- return (size - 17) / 4;
111
- }
112
-
113
- // 通过QR码版本计算矩阵size
114
- function typeNumber2Size(typeNumber: number) {
115
- return typeNumber * 4 + 17
116
- }
117
-
118
- // 在指定位置 绘制一个侦测图 ◈
119
- const setupPositionProbePattern = function(matrix: BitMatrix, row: number, col: number) {
120
- rectBorder(matrix, 0, row - 1, col - 1, 9, 9);
121
- rectBorder(matrix, 1, row, col, 7, 7);
122
- rectBorder(matrix, 0, row + 1, col + 1, 5, 5);
123
- fillRect(matrix, 1, row + 2, col + 2, 3, 3);
124
- };
125
-
126
- // 填充所有侦测图
127
- const setupAllPositionProbePattern = function(matrix: QRMatrix) {
128
- let size = matrix.size;
129
- setupPositionProbePattern(matrix, 0, 0);
130
- setupPositionProbePattern(matrix, size - 7, 0);
131
- setupPositionProbePattern(matrix, 0, size - 7);
132
- };
133
-
134
- // 填充校正图
135
- const setupPositionAdjustPattern = function(matrix: QRMatrix, typeNumber?: number) {
136
- let { size } = matrix;
137
- typeNumber = typeNumber || size2TypeNumber(size);
138
- let pos = PATTERN_POSITION_TABLE[typeNumber - 1];
139
- for (let i = 0; i < pos.length; i++) {
140
- for (let j = 0; j < pos.length; j++) {
141
- let row = pos[i];
142
- let col = pos[j];
143
- // if (matrix[row][col] != null) continue;
144
- if (row < 9 || col < 9) {
145
- let m = size - 9;
146
- if ((row < 9 || row > m) && (col < 9 || col > m)) continue;
147
- }
148
- for (let r = -2; r <= 2; r++) {
149
- for (let c = -2; c <= 2; c++) {
150
- if (r == -2 || r == 2 || c == -2 || c == 2 || (r == 0 && c == 0)) {
151
- // matrix[row + r][col + c] = true;
152
- matrix.set(col + c, row + r, 1);
153
- } else {
154
- matrix.set(col + c, row + r, 0);
155
- // matrix[row + r][col + c] = false;
156
- }
157
- }
158
- }
159
- }
160
- }
161
- };
162
-
163
- // 填充定位图
164
- const setupTimingPattern = function(matrix: BitMatrix) {
165
- let mapLength = matrix.width;
166
- for (let r = 8; r < mapLength - 8; r += 1) {
167
- matrix.set(r, 6, r % 2 == 0);
168
- matrix.set(6, r, r % 2 == 0);
169
- }
170
- };
171
-
172
- // 填充格式信息
173
- const setupTypeInfo = function(
174
- matrix: BitMatrix,
175
- test: boolean,
176
- errorCorrectionLevel: number,
177
- maskPattern: number
178
- ) {
179
- let mapLength = matrix.width;
180
- let data = (errorCorrectionLevel << 3) | maskPattern;
181
- let bits = getBCHTypeInfo(data);
182
- // vertical
183
- for (let i = 0; i < 15; i += 1) {
184
- let mod = !test && ((bits >> i) & 1) == 1;
185
- if (i < 6) {
186
- matrix.set(8, i, mod);
187
- } else if (i < 8) {
188
- matrix.set(8, i + 1, mod);
189
- } else {
190
- matrix.set(8, mapLength - 15 + i, mod);
191
- }
192
-
193
- if (i < 8) {
194
- matrix.set(mapLength - i - 1, 8, mod);
195
- } else if (i < 9) {
196
- matrix.set(15 - i, 8, mod);
197
- } else {
198
- matrix.set(15 - i - 1, 8, mod);
199
- }
200
- }
201
-
202
- // horizontal
203
- // for (var i = 0; i < 15; i += 1) {
204
- // var mod = !test && ((bits >> i) & 1) == 1;
205
- // if (i < 8) {
206
- // matrix.set(mapLength - i - 1,8,mod);
207
- // } else if (i < 9) {
208
- // matrix.set(15 - i,8,mod);
209
- // } else {
210
- // matrix.set(15 - i - 1,8,mod);
211
- // }
212
- // }
213
-
214
- // fixed module
215
- matrix.set(8, mapLength - 8, !test);
216
- };
217
-
218
- // 填充版本信息
219
- var setupTypeNumber = function(matrix: BitMatrix, test: boolean, typeNumber?: number) {
220
- let mapLength = matrix.width;
221
- typeNumber = typeNumber || size2TypeNumber(mapLength);
222
- let bits = getBCHTypeNumber(typeNumber);
223
- for (let i = 0; i < 18; i += 1) {
224
- let mod = !test && ((bits >> i) & 1) == 1;
225
- // matrix[Math.floor(i / 3)][(i % 3) + mapLength - 8 - 3] = mod;
226
- matrix.set((i % 3) + mapLength - 8 - 3, Math.floor(i / 3), mod);
227
- matrix.set(Math.floor(i / 3), (i % 3) + mapLength - 8 - 3, mod);
228
- }
229
- };
230
-
231
- // 生成空矩阵
232
- function mapInit(size: number): QRMatrix {
233
- return new QRMatrix(size);
234
- }
235
-
236
- const MatrixCache:QRMatrix[] = [];
237
- function createQRmatrix(typeNumber:number):QRMatrix{
238
- let size = typeNumber2Size(typeNumber);
239
- let matrix = mapInit(size);
240
- setupAllPositionProbePattern(matrix);
241
- //填充矫正位图
242
- setupPositionAdjustPattern(matrix);
243
- //填充定位图
244
- setupTimingPattern(matrix);
245
- return matrix;
246
- }
247
- function getBaseQRMatrix(typeNumber:number):QRMatrix{
248
- let matrix = MatrixCache[typeNumber] || (MatrixCache[typeNumber] = createQRmatrix(typeNumber));
249
- return matrix.clone();
250
- }
251
-
252
-
253
-
254
- // 拷贝矩阵
255
- function copyMap(matrix: QRMatrix): QRMatrix {
256
- return matrix.clone();
257
- }
258
-
259
- //矩阵对比操作
260
- function compareMap(m1: QRMatrix, m2: QRMatrix, type: string): QRMatrix {
261
- type = type || 'and';
262
- if (m1.total !== m2.total) throw 'Different size';
263
- let matrix = new QRMatrix(m1.size);
264
-
265
- let _d1 = m1.getPrototypeData();
266
- let _m1 = m1.markMatrix.getPrototypeData();
267
-
268
- let _d2 = m2.getPrototypeData();
269
- let _m2 = m2.markMatrix.getPrototypeData();
270
-
271
- let md = matrix.getPrototypeData();
272
- let _md = matrix.markMatrix.getPrototypeData();
273
-
274
- for (let i = 0; i < _d1.length; i++) {
275
- switch (type) {
276
- case 'or':
277
- case '|':
278
- var mk = (_md[i] = _m1[i] | _m2[i]);
279
- _md[i] = (_m1[i] | _m2[i]) & mk;
280
- break;
281
- case 'xor':
282
- case '^':
283
- var mk = (_md[i] = _m1[i] ^ _m2[i]);
284
- md[i] = (_d1[i] ^ _d2[i]) & mk;
285
- break;
286
- case 'and':
287
- case '&':
288
- var mk = (_md[i] = _m1[i] & _m2[i]);
289
- md[i] = _d1[i] & _d2[i] & mk;
290
- break;
291
- default:
292
- throw 'type err!';
293
- }
294
- }
295
- return matrix;
296
- }
297
-
298
- // 矩阵分布评分 (筛选最优掩模方案)
299
- const getLostPoint = function(matrix: BitMatrix): number {
300
- let size = matrix.width;
301
- let lostPoint = 0;
302
- let isDark = function(row, col) {
303
- return matrix.get(col, row);
304
- };
305
-
306
- // LEVEL1
307
- for (let row = 0; row < size; row += 1) {
308
- for (let col = 0; col < size; col += 1) {
309
- let sameCount = 0;
310
- let dark = isDark(row, col);
311
- for (let r = -1; r <= 1; r += 1) {
312
- if (row + r < 0 || size <= row + r) {
313
- continue;
314
- }
315
- for (let c = -1; c <= 1; c += 1) {
316
- if (col + c < 0 || size <= col + c) {
317
- continue;
318
- }
319
- if (r == 0 && c == 0) {
320
- continue;
321
- }
322
- if (dark == isDark(row + r, col + c)) {
323
- sameCount += 1;
324
- }
325
- }
326
- }
327
- if (sameCount > 5) {
328
- lostPoint += 3 + sameCount - 5;
329
- }
330
- }
331
- }
332
-
333
- // LEVEL2
334
- for (var row = 0; row < size - 1; row += 1) {
335
- for (var col = 0; col < size - 1; col += 1) {
336
- var count = 0;
337
- if (isDark(row, col)) count += 1;
338
- if (isDark(row + 1, col)) count += 1;
339
- if (isDark(row, col + 1)) count += 1;
340
- if (isDark(row + 1, col + 1)) count += 1;
341
- if (count == 0 || count == 4) {
342
- lostPoint += 3;
343
- }
344
- }
345
- }
346
-
347
- // LEVEL3
348
- for (var row = 0; row < size; row += 1) {
349
- for (var col = 0; col < size - 6; col += 1) {
350
- if (
351
- isDark(row, col) &&
352
- !isDark(row, col + 1) &&
353
- isDark(row, col + 2) &&
354
- isDark(row, col + 3) &&
355
- isDark(row, col + 4) &&
356
- !isDark(row, col + 5) &&
357
- isDark(row, col + 6)
358
- ) {
359
- lostPoint += 40;
360
- }
361
- }
362
- }
363
-
364
- for (var col = 0; col < size; col += 1) {
365
- for (var row = 0; row < size - 6; row += 1) {
366
- if (
367
- isDark(row, col) &&
368
- !isDark(row + 1, col) &&
369
- isDark(row + 2, col) &&
370
- isDark(row + 3, col) &&
371
- isDark(row + 4, col) &&
372
- !isDark(row + 5, col) &&
373
- isDark(row + 6, col)
374
- ) {
375
- lostPoint += 40;
376
- }
377
- }
378
- }
379
-
380
- // LEVEL4
381
-
382
- var darkCount = 0;
383
-
384
- for (var col = 0; col < size; col += 1) {
385
- for (var row = 0; row < size; row += 1) {
386
- if (isDark(row, col)) {
387
- darkCount += 1;
388
- }
389
- }
390
- }
391
-
392
- var ratio = Math.abs((100 * darkCount) / size / size - 50) / 5;
393
- lostPoint += ratio * 10;
394
-
395
- return lostPoint;
396
- };
397
-
398
- // 填充数据
399
- const setupData = function(matrix: QRMatrix, data: number[], maskPattern: number) {
400
- let _moduleCount = matrix.width;
401
- let inc = -1;
402
- let row = _moduleCount - 1;
403
- let bitIndex = 7;
404
- let byteIndex = 0;
405
- let maskFunc = getQRMaskFunction(maskPattern);
406
-
407
- for (var col = _moduleCount - 1; col > 0; col -= 2) {
408
- if (col == 6) col -= 1;
409
- while (true) {
410
- for (var c = 0; c < 2; c += 1) {
411
- if (!matrix.has(col - c, row)) {
412
- var dark = false;
413
- if (byteIndex < data.length) {
414
- dark = ((data[byteIndex] >>> bitIndex) & 1) == 1;
415
- }
416
- var mask = maskFunc(row, col - c);
417
- if (mask) {
418
- dark = !dark;
419
- }
420
- matrix.set(col - c, row, dark);
421
- bitIndex -= 1;
422
- if (bitIndex == -1) {
423
- byteIndex += 1;
424
- bitIndex = 7;
425
- }
426
- }
427
- }
428
- row += inc;
429
- if (row < 0 || _moduleCount <= row) {
430
- row -= inc;
431
- inc = -inc;
432
- break;
433
- }
434
- }
435
- }
436
- };
437
-
438
- export {
439
- QRMode,
440
- QRErrorCorrectionLevel,
441
- QRMaskPattern,
442
- BitBuffer,
443
- getBaseQRMatrix,
444
- setupAllPositionProbePattern,
445
- setupPositionAdjustPattern,
446
- setupTimingPattern,
447
- setupTypeInfo,
448
- setupTypeNumber,
449
- mapInit,
450
- copyMap,
451
- compareMap,
452
- createData,
453
- setupData,
454
- getLengthInBits,
455
- getLostPoint,
456
- getRSBlocks,
457
- getBufferForModes,
458
- getMaxDataCount
459
- };