Перейти к основному содержимому
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, электронная почта, SMS, телефон и координаты. Оптическая передача переносит целый файл с экрана на камеру, без кабеля, без Bluetooth, без сети между двумя устройствами.

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

Идея, которую стоит понять о передаче: экран излучает свет, камера его читает, и получатель никак не может запросить что-либо обратно. Канала возврата нет. Из этого следует всё остальное — кадры описывают сами себя, их порядок не важен, любое достаточно большое подмножество восстанавливает файл, а отправитель никогда не может знать, дошло ли что-то.

01

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

Ссылка, текст, 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 до того, как это увидит она, так что ей уже нечего будет обрезать. Полезные данные 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 исходного файла, а заголовок — первые четыре байта этого значения как быструю контрольную сумму. После восстановления получатель пересчитывает полный хэш и выдаёт ошибку несоответствия, если он отличается. Файл, выходящий из передачи, либо бит в бит совпадает с входным, либо это объявленный сбой. Третьего варианта нет.
Предел 32 MB и его причина
Свыше 32 MB мы отклоняем файл при выборе. Кодировщик RaptorQ материализует все пакеты сразу и работает синхронно на основном потоке — измерено 2,5 секунды для 32 MB на компьютере, в несколько раз дольше на телефоне. За это время кнопка Stop уже отрисована и не может быть нажата. Ранний отказ честнее, чем вкладка, которая умирает на 80%.

От исследования к внедрению

Как мы готовим проект с MEGA QR.

01

Выбираем, какой из двух инструментов является ответом

QR-код ведёт к короткому содержимому и, если это ссылка, к странице, которую можно изменить позже — напечатанный код сам не меняет своё назначение. Оптическая передача перемещает файл между двумя устройствами, которым нельзя или невозможно общаться по сети. Это разные задачи, и их путаница — самая частая.

02

Фиксируем физические условия

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

03

Проверяем на устройствах, которые будут реально использоваться

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

Вопросы, которые стоит уточнить.

Как быстро реально проходит файл?

Через симулированный канал камеры, при 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 берёт управление, поэтому его обработчик их никогда не видит. Страница сообщает о своих ресурсах через Performance API вместо того, чтобы предполагать.

Показательный пример

Расписание станции на экране, к которому никто ничего не нажимает

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

Исходная ситуация

Экран на станции или витрина должны давать прохожим файл — полное расписание, меню, форму — без публичного 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 требует проверки соответствия, доступа и утверждений.

Это сценарии адаптации, а не заявления о существующих контрактах или партнерствах. Предлагаемые функции подтверждаются в рабочей области проекта.

Обсудить пилот

Часть экосистемы.

Что вы хотели бы наладить?

Расскажите о своём процессе. Вместе определим, что стоит построить, что можно подключить и как проверим результат.

Давайте обсудим