Если исходный QR-код сканируется, а после размещения в макете перестал, начните с поля вокруг него. У обычного QR-кода оно должно быть свободным и занимать не меньше четырёх модулей с каждой стороны. Модуль — один маленький квадрат сетки. Белую область вокруг рисунка легко принять за лишний отступ и случайно удалить вместе с важным условием распознавания.
Требование к полю описано у разработчика технологии, DENSO WAVE. Внутри него не должно быть надписи, рамки или фрагмента фотографии. Поэтому аккуратно выровнять край чёрных квадратов по краю карточки недостаточно: место нужно зарезервировать и для окружения кода.
Возврат поля — хороший первый шаг, но не универсальное лечение. На чтение также влияют размер модулей, качество вывода и условия сканирования. Ниже разберём, как измерить нужный отступ, отделить ошибку вёрстки от ошибки ссылки и подготовить понятную проверку перед печатью.
Что показывает пример с тремя файлами
В приложении к статье сохранён один учебный код со строкой https://example.com/check. У него сетка 25 × 25 модулей; каждый модуль занимает 10 × 10 пикселей. Сам символ поэтому имеет сторону 250 пикселей. Четыре модуля поля добавляют по 40 пикселей слева, справа, сверху и снизу. Полный исходник получается 330 × 330.
Вторая версия получена обрезкой только белого поля. Сетка внутри осталась прежней, но размер файла сократился до 250 × 250. Для третьей версии вокруг неё снова добавлено по 40 белых пикселей. В таблице приведены результаты декодирования этих файлов OpenCV 5.0.0: исходный и восстановленный варианты возвращают нужную строку, обрезанный — пустую.
Это сравнение полезно тем, что между вариантами изменено одно условие. Не нужно гадать, виноваты ли новый адрес, другая форма квадратов или сжатие фотографии. В файлах приложения сохранены одинаковая сетка и разные поля; результат можно сопоставить с исходниками.
Проверять следует именно извлечённую строку. Найденная рамка вокруг QR ещё не доказывает правильное чтение адреса. В OpenCV обнаружение и декодирование описаны как отдельные операции, хотя есть и общий метод для обоих шагов.
| Файл | Размер | Поле с каждой стороны | Прочитана исходная строка |
|---|---|---|---|
| Исходный | 330 × 330 px | 40 px = 4 модуля | Да |
| Обрезанный | 250 × 250 px | 0 | Нет |
| Поле восстановлено | 330 × 330 px | 40 px = 4 модуля | Да |
Почему удачный скан без поля не отменяет требования
Пример показывает поведение одного декодера на цифровых изображениях. Он не измеряет долю успешных попыток на разных телефонах и не задаёт гарантии для тиража. Другой сканер может прочитать вариант без поля, особенно если вокруг картинки на экране уже есть свободная светлая область. Но в готовом макете это окружение может оказаться другим.
Представим, что обрезанный QR проверяли в просмотрщике на белом фоне, а затем поставили на цветную фотографию. Формально файл не изменился. Изменилась область вокруг символа, и прежняя проверка больше не описывает условия размещения. Поэтому оценивать нужно код вместе с окружением, которое увидит камера.
Не стоит считать сохранённое поле запасным декоративным пространством. Если в него заходит подпись или рамка, чистый отступ нужно измерять до этого элемента. Белый прямоугольник достаточного размера может обеспечить нужное окружение даже тогда, когда отдельный файл QR обрезан, но это должно оставаться явной частью макета, которую не потеряют при следующей адаптации.
Как перевести четыре модуля в миллиметры
Для нашего кода полная сторона состоит из 25 модулей символа и восьми модулей поля: по четыре с двух сторон. Всего 33. Если весь квадрат вместе с полями размещён шириной 33 мм, один модуль равен 1 мм, а поле с каждой стороны — 4 мм. При общей ширине 16,5 мм получаются модуль 0,5 мм и поле 2 мм.
Формула для такого расчёта: полный размер разделить на число модулей сетки плюс восемь. Затем размер модуля умножить на четыре. Важно уточнить, что именно вам сообщили: ширину всего изображения или только самого символа. Если 25 мм относятся к сетке 25 × 25, полная сторона с полями будет 33 мм. Это другое размещение, чем полный квадрат шириной 25 мм.
Переносить отступ из старого макета без расчёта неудобно: у следующего кода может быть больше модулей. DENSO связывает плотность сетки с версией и вместимостью символа. При одинаковой общей ширине более плотная сетка даёт меньшие отдельные квадраты. Проверяйте готовый исходник, а не ориентируйтесь на размер похожего QR из другого проекта.
Геометрия ещё не сообщает минимальный пригодный размер. В руководстве DENSO по размеру модуля отдельно рассматриваются ограничения печати и сканера. Поэтому совет «всегда делайте два сантиметра» оставляет за скобками носитель, дистанцию и устройство. Для конкретного размещения нужен образец в конечном размере.
Проверяйте экспорт, который попадёт на носитель
Сначала сравните исходный QR и финальный макет. Сохранилось ли поле? Не вытянулись ли квадраты по одной оси? Не попадает ли часть кода под обрезку страницы? Если исходник читается, а экспорт нет, это уже полезное сужение задачи: проблема появилась между этими двумя состояниями.
При растровом экспорте рассмотрите границы модулей. Маленькая картинка после пересчёта может выглядеть иначе, чем крупный исходник в генераторе. Само по себе увеличение значения DPI не восстановит потерянную структуру; связь пикселей и печатного размера разобрана в отдельной статье. Лучше сохранить исходный QR и вернуться к нему, чем увеличивать скриншот из согласования.
Для печати подготовьте пробный экземпляр в реальном масштабе на материале, близком к конечному. Сканируйте с той дистанции и при таком расположении, которые ожидаются в использовании. Маленький код на упаковке и код на высоком плакате дают разные условия. Если поверхность блестит, проверьте положение с видимым бликом, а не только удобный угол под лампой.
Запишите, что проверено: ширина вместе с полями, материал, устройство, освещение и извлечённый адрес. Повторите чтение на других доступных устройствах, если аудитория использует разные телефоны. Несколько удачных попыток не дают статистической гарантии, но конкретные условия помогают обнаружить очевидный сбой до тиража и воспроизвести замечание.
Распознавание и открытие ссылки — две проверки
Камера может правильно прочитать адрес, а браузер — показать ошибку или запрос входа. В таком случае увеличение поля не исправит назначение ссылки. Сначала сравните извлечённую строку с согласованной: домен, путь и параметры. Затем откройте её в условиях обычного читателя.
Если материал должен быть публичным, проверьте доступ без рабочего входа в сервис. Документ, который открывается у автора макета, может быть закрыт для остальных. После перехода также посмотрите, куда привёл редирект: на нужный материал, общий экран сайта или устаревшую страницу. Кодирование адреса не подтверждает, что по нему находится обещанное содержание.
В учебном приложении используется https://example.com/check. Проверяется совпадение строки, а не существование полезной страницы по этому пути. Для рабочего QR эти действия нужны оба. Сохраните текстовый адрес рядом с исходником: его проще сверить и согласовать, чем распознавать заново при каждой правке макета.
Что передать перед печатью
В пакет согласования положите финальный макет, исходный QR с полями и текст ссылки. Укажите полный размер размещения и условия проведённой проверки. Если обнаружили дефект, приложите варианты до и после одной конкретной правки: например, возврата поля. Так следующий участник сможет проверить причину, а не заново угадывать её по скриншоту.
Архив ниже содержит три учебных изображения, исходник проверки и сохранённый результат. Его задача — показать, что обрезка окружения способна нарушить чтение при неизменной сетке. Для выпуска важен уже ваш финальный носитель: свободное поле нужной ширины, читаемый символ и доступная страница, которую действительно должен увидеть человек.
