Как мы проверяем, что QR-код считывается, и как проверить самому
Код, который читается с экрана ноутбука, может не сработать на меню. За каждым дизайном PaintQR стоит один и тот же метод: два программных декодера на каждый код, четырнадцать смоделированных условий съёмки в лаборатории и распечатанные листы, которые сканируют настоящие телефоны. Тот же метод в коротком виде — то, что стоит проделать с собственной распечаткой.
Обновлено 10 ноября 2026 г.
Три уровня, а не один
Нет одной проверки, которая доказала бы, что QR-код считается. Декодер на компьютере куда снисходительнее камеры телефона на расстоянии вытянутой руки, а тот же телефон в ярко освещённом магазине строже, чем за письменным столом. Поэтому PaintQR проверяет на трёх уровнях, и каждый дешевле и чаще следующего: любой дизайн декодируется программно, прежде чем его можно скачать; правила, которые применяет эта программа, выведены из тестов телефонами на распечатанных листах; а лабораторный стенд, на котором мы сравниваем стили и настройки, прогоняет код через условия, которые создаёт камера.
Каждый уровень ловит свой тип ошибки. Программные декодеры отсекают код, который попросту неверен. Правила, полученные на телефонах, отсекают дизайны, которые читаются на компьютере, но провалились на реальных устройствах. Стенд ещё до появления правила показывает, какие решения делают код хрупким.
Первый уровень: два декодера на каждый дизайн
Каждый дизайн, который вы видите в редакторе, уже декодирован дважды. Первый декодер — zxing-cpp, библиотека, от которой происходит большинство сканеров на Android. Второй — детектор OpenCV, который бинаризует изображение блоками и ошибается иначе: именно он плохо справляется с большими сплошными заливками. Каждому декодеру достаются цветной рендер, чёрно-белый рендер и копия, размытая до трёх пикселей на модуль, — она заменяет мелкую или нерезкую распечатку.
Если эталонный декодер не может прочитать чистый рендер, дизайн отклоняется сразу, и редактор объясняет почему. Такого быть не должно, и это единственная проверка без исключений. Результаты остальных декодеров на размытых копиях записываются и попадают в отчёт; они подкрепляют правила ниже, но сами по себе ничего не блокируют, потому что на размытых изображениях ведут себя непредсказуемо и непохоже на телефоны.
Второй уровень: правила из 140 попыток на телефонах
В сентябре 2026 года мы распечатали листы с дизайнами и отсканировали их iPhone и Android-телефоном Motorola — штатными приложениями камеры, с расстояния вытянутой руки, при комнатном освещении, с экрана и с бумаги: всего около 140 попыток. Каждый дизайн, который телефоны отвергли, по-прежнему декодировался на компьютере. Поэтому правила построены на тех признаках дизайна, которые предсказывали отказы телефонов, а не на показаниях программных декодеров.
Провалились три типа. Дизайн, в котором тёмные модули занимают больше половины области данных и в основном сливаются в сплошные блоки, начиная с версии 15: это были гибискус и сердце. Тёмная цветная иконка из библиотеки в версии 15, где 6 из 8 попыток провалились, тогда как в версии 10 прошли 5 из 5. И дизайн с цветным акцентом в версии 15, потративший на картинку больше пятой части запаса коррекции ошибок. Всё остальное — буквы, логотипы и фотографии в версиях с 6 по 15 с настройкой по умолчанию — прошло каждую попытку.
Дизайн, подпадающий под один из этих типов, помечается как хрупкий. Редактор не продаёт его как есть: он снижает детализацию или бюджет картинки, генерирует заново, проверяет снова и показывает, что изменил. Единственное исключение — версия 20, максимальная детализация: она провалилась при размере, достаточном для версии 15, но читается при более крупной печати, поэтому её не отклоняют, а назначают больший минимальный размер печати.
Третий уровень: лабораторный стенд
Когда мы сравниваем стиль, настройку или изменение в движке, успешное чтение чистого изображения мало о чём говорит. Стенд берёт отрендеренный код и прогоняет его через четырнадцать условий, имитирующих работу камеры: код мал в кадре — три и 2,4 пикселя на модуль; размытие; наклон на 25 и 40 градусов и боковой наклон на 30; неровное освещение; низкий контраст; шум сенсора; сжатие JPEG; пересъёмка с экрана; растекание краски на бумаге; и сочетание наклона, освещения и размытия. Каждое изображение уходит во все декодеры, которые удаётся установить: zxing-cpp, OpenCV, детектор WeChat из OpenCV, zbar и классический Java ZXing, чей старый бинаризатор самый требовательный из всех и ближе всего к старым приложениям-сканерам.
Оценка сканирования — доля пар «условие — декодер», в которых распознан правильный текст; отчёт называет самые слабые условия. Так были настроены правило размера печати и уровни безопасности сканирования, и это мы запускаем перед любым изменением, затрагивающим картинку.
Как измеряли размеры печати
Распечатанные обычные коды декодировались вплоть до примерно 0,4 мм на модуль с расстояния вытянутой руки. Кодам с картинкой нужно примерно в полтора раза больше: версия 15 работала при 0,66 мм на модуль и провалилась при 0,5. Версия 20 при 0,5 тоже провалилась; для неё и выше мы указываем 0,8 мм на модуль — с запасом над точкой отказа, — пока печатный тест на 6,5, 8,5 и 10 см не заменит оценку измерением. Размер под каждым дизайном — это число его модулей вместе с полем, умноженное на нужную величину и округлённое вверх. Полная таблица по версиям есть в руководстве по размеру печати.
Проверьте свою распечатку за пять минут
Наши проверки делают плохой дизайн маловероятным. Но они не видят ваш принтер, вашу бумагу и свет в вашем зале. Перед тиражом меню или визиток сделайте это один раз:
- Распечатайте один экземпляр в нужном размере и приложите линейку. Страница, напечатанная с опцией «по размеру страницы», выходит меньше задуманного, а коду минимального размера сжиматься уже некуда.
- Возьмите два телефона разных производителей со штатными приложениями камеры, а не приложение-сканер, которое может оказаться снисходительнее телефонов ваших клиентов.
- Сканируйте с расстояния вытянутой руки при том освещении, где код будет висеть, затем с полуторного расстояния, затем наклонив телефон примерно на тридцать градусов.
- Не принимайте проверку на экране за проверку печати. Экран подсвечен и резче бумаги; код, который читается с монитора, доказал лишь то, что сам дизайн корректен.
- Если поверхность глянцевая или заламинирована, сканируйте под потолочным светильником. Блик на любом из трёх больших угловых квадратов останавливает чтение.
- Если хоть одно сканирование не удалось: сначала напечатайте крупнее, затем выберите сбалансированный режим безопасности или меньшую детализацию, и лишь потом упрощайте картинку. Почти всегда хватает одного из первых двух шагов.
Чего мы не обещаем
Два телефона и пять декодеров — это не все телефоны и не все приложения. Старые сканеры на классическом бинаризаторе ZXing читают хуже современных приложений камеры, и это мы проверяем в лаборатории, а не на устройствах. Ваш принтер, краска и бумага меняют контраст так, как ни одна модель не предскажет полностью. Проверки выше — фильтр, отсеивающий дизайны, которые заведомо не работают; доказательство — печатный тест, и провести его предстоит вам.
Одно нынешнее ограничение, без обиняков: режим, который сохраняет формы логотипа в точности и выносит узор кода за их пределы, прошёл программные декодеры и лабораторный стенд в настройке «максимум картинки», но его проверка телефонами на распечатанных листах ещё идёт. Пока она не завершена, печатайте такие знаки крупно и делайте пятиминутную проверку перед большим тиражом — или выберите сбалансированный режим безопасности, который добавляет коррекцию ошибок ценой небольшой части места.
Частые вопросы
Мой код читается с экрана, но не с бумаги. Почему?
Бумага темнее, мягче и меньше экрана. Обычные причины по порядку: распечатка вышла меньше минимального размера, чаще всего из-за опции «по размеру страницы»; глянцевая поверхность отражает светильник в камеру; или дизайн находится у границы того, что терпит телефон, — тогда помогает более крупная печать или сбалансированный режим.
На каких телефонах и в каких приложениях вы проверяли?
Распечатанные листы сканировали iPhone и Android-телефоном Motorola штатными приложениями камеры: около 140 попыток в сентябре 2026 года и дополнительные проверки версии 20 в октябре. Лабораторный стенд добавляет пять программных декодеров, включая классический Java ZXing, который представляет старые приложения-сканеры.
Цветной код читается так же хорошо, как чёрно-белый?
Телефон различает тёмное и светлое, а не цвета. PaintQR держит каждый тёмный модуль ниже порога яркости, а каждый светлый — выше, так что цвета предназначены людям, а контраст — камере. Единственный цветной вариант, провалившийся на телефонах, — сильный акцент в версии 15 с большим бюджетом картинки — теперь перехватывают правила.
Сколько коррекции ошибок уходит на картинку?
Обычный код на самом низком уровне восстанавливает около 7 % модулей, на среднем — около 15 %. Настройка безопасности сканирования решает, какую часть этого запаса картинка может потратить: «Надёжно» — около десятой части, «Сбалансированно» — пятую, «Максимум картинки» — около трети. Остальное остаётся на складки, блики и дрожащие руки.