От данных к узору
Создание QR-кода начинается с выбора режима кодирования, подходящего для данных: цифровой, буквенно-цифровой, байтовый или кандзи. Кодировщик переводит данные в биты, делит их на 8-битные кодовые слова и добавляет кодовые слова коррекции ошибок Рида — Соломона выбранного уровня. Затем он подбирает наименьшую версию, в которую всё помещается.
Кодовые слова укладываются в сетку зигзагообразным путём в обход фиксированных узоров. В конце кодировщик накладывает одну из восьми масок, чтобы разбить крупные пустые области и запутывающие формы, а маску и уровень коррекции ошибок записывает в информацию о формате.
- Выбрать режим кодирования
- Закодировать данные и добавить кодовые слова коррекции ошибок
- Подобрать версию (размер)
- Разместить поисковые, синхронизирующие и выравнивающие узоры
- Заполнить модули данных
- Применить лучшую из восьми масок и записать информацию о формате
От изображения с камеры к данным
Декодирование выполняет те же шаги в обратном порядке. Сканер находит три поисковых узора, у которых соотношение тёмного и светлого 1:1:3:1:1 выделяется на фоне большинства изображений, и с их помощью, а также синхронизирующих и выравнивающих узоров строит карту сетки. Он читает информацию о формате, снимает маску и собирает кодовые слова.
Затем декодирование Рида — Соломона исправляет неверно прочитанные кодовые слова в пределах, которые допускает уровень коррекции ошибок. Если повреждено слишком много, код просто не читается, а не выдаёт неверные данные, поэтому QR-коды редко дают искажённый результат.
Почему важны размер и контраст
Каждый шаг зависит от того, отличает ли камера тёмные модули от светлых. Мелкие модули, низкий контраст, блики, размытие или отсутствие свободной зоны — всё это увеличивает число сомнительных модулей, а коррекция ошибок способна поглотить лишь ограниченное их количество. Короткие данные, сильный контраст и чистые поля делают работу декодера максимально простой.