| 12345678910111213141516171819202122232425262728293031323334353637 |
- const fs = require('node:fs');
- const path = require('node:path');
- const QRCode = require('../node_modules/qrcode-terminal/vendor/QRCode');
- const levels = require('../node_modules/qrcode-terminal/vendor/QRCode/QRErrorCorrectLevel');
- const { PNG } = require('pngjs');
- const QRReader = require('qrcode-reader');
- const url = 'http://192.168.110.245:8787/water-mini/index.html?invite_code=TEST-HC202609&demo=1';
- const qr = new QRCode(-1, levels.L);
- qr.addData(url);
- qr.make();
- const scale = 8;
- const quiet = 4;
- const size = (qr.getModuleCount() + quiet * 2) * scale;
- const png = new PNG({ width: size, height: size });
- for (let y = 0; y < size; y++) {
- for (let x = 0; x < size; x++) {
- const row = Math.floor(y / scale) - quiet;
- const col = Math.floor(x / scale) - quiet;
- const dark = row >= 0 && col >= 0 && row < qr.getModuleCount() && col < qr.getModuleCount() && qr.isDark(row, col);
- const offset = (y * size + x) * 4;
- const color = dark ? [0, 0, 0] : [255, 255, 255];
- png.data[offset] = color[0];
- png.data[offset + 1] = color[1];
- png.data[offset + 2] = color[2];
- png.data[offset + 3] = 255;
- }
- }
- const output = path.resolve(__dirname, '../src/static/invite-test.png');
- fs.mkdirSync(path.dirname(output), { recursive: true });
- fs.writeFileSync(output, PNG.sync.write(png));
- const reader = new QRReader();
- reader.callback = (error, result) => {
- if (error || result.result !== url) throw error || new Error('QR decode mismatch');
- console.log('Verified QR image: ' + output);
- console.log('Invite URL: ' + result.result);
- };
- reader.decode(PNG.sync.read(fs.readFileSync(output)));
|