Перейти до основного вмісту
megapromotingПоговорімо
Продукти MEGA QR

Інструменти в браузері Instrument public

QR-код. Або файл, що проходить крізь світло.

MEGA QR містить генератор кодів і інструмент оптичного передавання. Ви створюєте код для посилання, Wi-Fi або контакту; для передавання екран показує послідовність кодів, яку камера іншого пристрою відновлює у файл.

Generatorul MEGA QR: tipurile de cod, câmpul de conținut completat cu o adresă și codul QR generat alături
qr.megapromoting.com · код складається в браузері, з адреси, введеної в полі вмісту

MEGA QR

Від інформації до виконаної роботи.

01

Pregătești

Ви обираєте вміст коду або файл, який хочете передати.

02

Afișezi

Генератор створює зображення QR. Оптичне передавання показує послідовні кадри.

03

Scanezi

Камера зчитує код або збирає кадри, доки не зможе відновити файл.

Де стає корисним.

Генератор QR

Посилання, Wi-Fi, контакт та інші типи вмісту; експорт PNG або SVG.

Оптичне передавання

Дані передаються між екраном і камерою без мережевого з’єднання між пристроями.

Локальна обробка

Генерація та відновлення виконуються в браузері, без облікового запису користувача.

Оптичне передавання залежить від камери, освітлення, відстані та екрана. Пристрій, що передає, не отримує підтвердження прийому. Код, показаний публічно, можуть прочитати ті, хто його бачить.

MEGA QR детально

Що ви можете робити з цим проєктом.

MEGA QR — це два інструменти на одному домені, і другий зовсім не схожий на перший. Генератор створює QR-коди для восьми типів вмісту: посилання, текст, WiFi, візитна картка, WhatsApp, email, SMS, телефон і координати. Оптичне передавання переносить цілий файл з екрана на камеру без кабелю, без Bluetooth, без мережі між двома пристроями.

Обидва працюють повністю в браузері. Сторінки не надсилають жодних запитів до третіх сторін, а два бінари WebAssembly, від яких залежить передавання, постачаються з public/wasm/, а не з CDN — інакше обіцянка, що нічого не залишає пристрій, була б хибною. Пароль WiFi, введений у генераторі, ніколи не потрапляє на сервер.

Ідея, яку варто зрозуміти щодо передавання: екран випромінює світло, камера його читає, і приймач ніяк не може нічого запросити у відповідь. Зворотного каналу не існує. Із цього випливає все решта — кадри описують самі себе, їхній порядок не має значення, будь-яка достатньо велика підмножина відновлює файл, а відправник ніколи не може знати, чи щось дійшло.

01

Генератор: вісім типів, PNG і SVG, логотип по центру

Link, text, WiFi, vCard, WhatsApp, email, SMS, телефон і геолокація. Коли ви додаєте логотип, рівень корекції помилок примусово переходить на H, найвищий — логотип робить дірку в зоні даних, і код інакше не виживе. Логотип обмежено 35% площі, з попередженням від 30%. Експорт рендериться окремо від попереднього перегляду, щоб PNG на 4096 px не впливав на те, що на екрані.

02

Діакритичні знаки не губляться

Бібліотека генерації, qr-code-styling 1.9.2, перетворює текст через charCodeAt(i) & 0xFF і мовчки обрізає кожен румунський діакритичний знак і всю кирилицю: «Ștefan Țurcanu» сканувалося назад як «tefan urcanu». Ми кодуємо UTF-8 ще до того, як вона це бачить, щоб їй уже не було що обрізати. Payload-и WiFi і vCard теж екрануються — один «;» у паролі або кома в назві компанії інакше псували б код, без жодного знака.

03

Оптичне передавання: фонтан кодів, а не послідовність

Файл пакується в конверт (назва, тип MIME, розмір, SHA-256), стискається gzip, якщо виходить меншим, потім передається на RaptorQ (RFC 6330). Кожен кадр має фіксований заголовок із 20 байтів і один або кілька пакетів. Не має значення, які саме кадри ви зловили, має значення скільки: будь-яка достатньо велика підмножина відновлює файл. Виміряна за реально відрендереними пікселями, надлишковість RaptorQ становить 1,000x — LT-коди, які використовують еталонні проєкти, вимагають 1,15x.

04

Карусель: публічний екран, на якому ніхто нічого не натискає

Другий режим надсилання — це фіксований цикл, що повторюється без кінця, без сесії й без когось, хто натискає старт. Довжина циклу подорожує в кожному кадрі, тож перехожий, який наводить камеру, знає з першого спійманого коду, скільки все триває, замість того щоб бачити кружечок. Референтна конфігурація — 36 кадрів при 12 на секунду — це три секундний цикл, який переносить 25 KB з одного простого чорно-білого коду. Повне меню або повний розклад станції.

05

Воно адаптується до камери, яка дивиться, по трьох окремих осях

Кількість кодів на екрані, колір і версія QR — це три різні обмеження, і вони налаштовуються окремо. Шкала щільності має 29 кроків, від v10 на одній смузі (7 KB/s при 30 кадрах на секунду) до v39 на чотирьох смугах у кольорі (959 KB/s). Є також повна шкала без кольору, до 320 KB/s, бо камера, у якої помирає хромінанс, не повинна застрягати на одній смузі.

Дані та робота

Що входить у систему. Що потрібно перевірити.

Нічого не залишає пристрій
Генератор будує код на сторінці. Передавання відновлює файл у браузері приймача. Сторінки не роблять запитів до третіх сторін, а бінари WebAssembly (raptorq для фонтанного коду, zxing-wasm для декодування) постачаються локально. Немає облікового запису, немає сесії на сервері, немає реєстрації того, що ви передали.
QR — не секрет
Будь-хто, хто бачить код достатньо чітко, може його відсканувати. Це стосується і оптичного передавання: екран, що показує кадри, видно будь-якій камері в кімнаті. Ізольоване від мережі середовище не означає автоматично, що оптичне передавання дозволене — це вирішує політика організації, а не топологія мережі.
Цілісність перевіряють, а не припускають
Конверт містить повний SHA-256 оригінального файлу, а заголовок — перші чотири байти цього значення як швидку контрольну суму. Після відновлення приймач перераховує повний hash і видає помилку невідповідності, якщо він відрізняється. Файл, що виходить із передавання, або біт у біт такий самий, як на вході, або це оголошений збій. Третього варіанта не існує.
Поріг у 32 МБ і його причина
Понад 32 МБ ми відхиляємо файл під час вибору. Кодувальник RaptorQ матеріалізує всі пакети одразу й працює синхронно на головному потоці — виміряно 2,5 секунди для 32 МБ на комп’ютері, у кілька разів більше на телефоні. У цей проміжок кнопка Stop уже намальована, але натиснути її не можна. Раннє відхилення чесніше, ніж вкладка, що помирає на 80%.

Від дослідження до впровадження

Як ми готуємо проєкт із MEGA QR.

01

Визначаємо, який із двох інструментів є відповіддю

Код QR веде до короткого вмісту і, якщо це посилання, до сторінки, яку ви зможете змінити пізніше — надрукований код сам не змінює своє призначення. Оптичний перенос переміщує файл між двома пристроями, яким не дозволено або неможливо спілкуватися через мережу. Це різні завдання, і плутанина між ними трапляється найчастіше.

02

Фіксуємо фізичні умови

Для друку: контраст, кінцевий розмір, вільна зона навколо, протестовано в розмірі, в якому його буде наклеєно. Для переносу: наскільки великим припадає модуль на сенсор камери. Під жорсткою моделлю лінзи (зміщена на один піксель решітка хромінансу плюс розмиття 3x3) колір повертає всі три коди лише на 4 пікселі пристрою на модуль і абсолютно нічого на 2. Це справжня межа, і саме тому колір — вибір людини, а не контролера.

03

Тестуємо на пристроях, які фактично будуть використовуватися

Наш набір проходить через справжній ланцюг камер — кадри записуються як YUV 4:2:0 і передаються в Chrome як фальшива webcam, тож субдискретизація хромінансу є реальною. Чого там немає: об’єктива, відбиттів, руху, роликового затвора. Десять хвилин із справжнім телефоном дають першу чесну цифру і є наступним кроком у нашому списку роботи, а не деталлю.

Питання, які варто уточнити.

Наскільки швидко фактично проходить файл?

Через симульований ланцюг камери, на 10 кадрів за секунду, коли коди заповнюють більшу частину зображення на 3-5 пікселів камери на модуль, усі чотири конфігурації вийшли з перевіреним хешем: чорно-білий на одній смузі 15,8 KB/s, чорно-білий на чотирьох смугах 37,7 KB/s, колір на одній смузі 40,1 KB/s, колір на чотирьох смугах 115,7 KB/s. Колір на одній смузі перевершує чорно-білий на чотирьох. Рівень пропусків був нульовим усюди. Пам’ятайте, звідки взялися цифри: геометрично ідеальні кадри, без об’єктива і без руху. Справжній телефон ще не став перед ними.

Що він вимагає від камери та світла?

Від камери вимагається 1920x1080 на 30 кадрів за секунду, з пріоритетом для задньої; якщо Android відхиляє обмеження, переходимо на будь-яку камеру. Кожен захоплений кадр зменшується до 1280 px по довгій стороні перед декодуванням. Що справді має значення, то це не роздільна здатність, а скільки пікселів сенсора припадає на модуль: чорно-білому потрібно приблизно три, кольору — приблизно вдвічі більше, бо відеоланцюг телефона зазвичай видає 4:2:0 і вдвічі зменшує обидві площини кольору в обох напрямах. Тонка кольорова деталь — перше, що реальна камера руйнує.

Чому автоматичний режим повільніший, ніж може машина?

Бо єдине, що може виміряти пристрій, який надсилає, — це скільки символів згенерували його власні кодери порівняно з тим, скільки в нього попросили, — твердження про процесор, а не про камеру за два кулаки. Ноутбук ніколи не пропускає сходинку, тож контролер, який читає «нуль пропусків» як «ще далі», піднімається до вершини й виводить на екран чотири коди, що змінюються тридцять разів на секунду, які неможливо відсканувати. Це справді було доставлено одного разу, і людина знайшла це за хвилину. Тепер автоматичний режим обмежений однією смугою, чорно-білим, версією 26 і 15 кадрами за секунду. 15 — не кругле число: камера телефона записує на 30 і не синхронізована з екраном, тож кадр має залишатися показаним дві послідовні експозиції — 67 ms — щоб бути захопленим повністю.

Що стається, якщо приймач пропускає кадри?

Нічого особливого, і в цьому весь зміст. Немає номерів порядку для відновлення. Кодувальник створює пакети виправлення у співвідношенні 2x до джерельних символів — виміряно на цьому коді: при 60% втраті кадрів набір приблизно 2x K відновлює 2 MB без повторного показу списку. Абсолютний поріг — 60.000 пакетів; понад нього відправник просто частіше повторює список, що коштує часу, а не пам’яті. Якщо ж усе-таки щось піде не так, хеш SHA-256 це ловить, і передача явно завершується помилкою замість того, щоб доставити пошкоджений файл.

Відправник дізнається, коли файл уже доставлено?

Ні, і це не недогляд. Немає каналу зворотного зв’язку — екран випромінює світло, а світло не повертається з підтвердженнями. Завершення видно на пристрої, який приймає. Будь-який інтерфейс, що стверджував би протилежне, брехав би, і в нас уже був одного разу тест, який давав саме той доказ, якого продукт ніколи не має: симуляція обчислювала свою частку промахів із того, що симульована камера спромоглася розв’язати. Оце і є канал зворотного зв’язку. Коли тест і доставлений код не погоджуються щодо того, що можна знати, тест і є тим, хто бреше.

Який максимальний розмір файла і чому саме такий?

32 MB, відхиляється під час вибору, якщо більший. Обмеження не походить із протоколу, а з пам’яті вкладки браузера: RaptorQ матеріалізує всі пакети одразу, а файл на 50 MB за коефіцієнта 2x означав би 150 MB живих масивів, достатньо, щоб убити вкладку на телефоні. Кодування виконується синхронно в основному потоці, виміряно як 2,5 секунди для 32 MB на комп’ютері. Те, що фактично передається, — не розмір файла: пакунок стискається gzip перед RaptorQ, тож таблиця на 1 MB — це кілька кілобайт пакетів, а фотографія на 1 MB — це мегабайт пакетів.

Мені потрібен обліковий запис або інтернет?

Ні, ані те, ані те. Немає облікового запису і немає підписки. Після першого візиту сторінки працюють без мережі, тому що все — включно з двома бінарними файлами WebAssembly — подається з власного домену. Варто також сказати те, чого ми навчилися дорогою: зареєстрований service worker не означає підтримку offline. Під час першого завантаження сторінка і її ресурси приходять до того, як worker бере контроль, тож його handler ніколи їх не бачить. Сторінка повідомляє про власні ресурси через Performance API замість того, щоб припускати.

Ілюстративний приклад

Розклад станції, на екрані, до якого ніхто нічого не натискає

Сценарій використання, без даних клієнта чи приписаних комерційних результатів.

Початкова ситуація

Екран на станції або у вітрині має дати перехожим файл — повний розклад, меню, форму — без public WiFi, без облікового запису і без того, щоб хтось щось натискав.

Як працює

Екран запускає карусель: 36 кадрів по 12 за секунду, три секундний оберт, що повторюється без кінця. Щільність фіксована на час каруселі, бо оберт — це обіцянка лише тоді, коли його довжина зберігається. Довжина оберту мандрує в кожному кадрі, тож телефон, який зловив перший код, одразу знає, скільки все триває.

Rezultatul

Перехожий знімає три секунди й отримує 25 KB, відновлені у своєму браузері, перевірені за SHA-256, з одного простого чорно-білого коду. Екран не дізнається, що його прочитали, і не може.

Ce este necesar:Un ecran care poate ține un cadru afișat 83 ms fără sfâșiere, lumină în care codul nu e spălat de reflexii, și o cameră care rezolvă aproximativ trei pixeli de senzor per modul. Cifra de 25 KB e derivată din aceleași funcții pe care le folosește expeditorul, nu tastată de mână alături de ele.

Можливості співпраці

MEGA QR, у контексті вашої організації.

Пункти доступу та локального передавання

Коди для доступу до публічної інформації, інструкції або контакти; оптичне передавання файлів між сумісними пристроями з оцінкою політик безпеки установи.

Приватні компанії

Ми визначаємо пілот навколо реального процесу: користувачі, дані, інтеграції, витрати та критерії приймання. Розширення відбувається після оцінки результату.

Державні установи та компанії

Визначаємо вимоги до доступності, хостингу, захисту даних та інтероперабельності. Будь-яке з’єднання з послугами AGE або STISC потребує валідації придатності, доступу та схвалень.

Це сценарії адаптації, а не заяви про наявні контракти чи партнерства. Запропоновані функції підтверджуються в межах робочої сфери проєкту.

Обговорити пілот

Частина екосистеми.

Що вам хотілося б налагодити?

Розкажіть про свій процес. Разом визначимо, що варто збудувати, що можна підключити і як перевіримо результат.

Поговорімо