Декодер QR
Сканируйте и декодируйте изображения QR-кодов онлайн. Поддержка перетаскивания и вставки из буфера обмена. Вся обработка происходит в браузере.
Перетащите изображение QR-кода сюда
Поддерживает PNG, JPG, GIF, BMP, WebP и другие распространённые форматы изображений
Вы также можете вставить изображение из буфера обмена с помощью Ctrl+V
Что такое декодирование QR-кода?
Декодер QR-кодов читает изображение с QR-кодом и извлекает данные, записанные внутри. Результатом может быть URL, обычный текст, настройки Wi-Fi, контактная карточка, платежная ссылка или другая закодированная строка. Инструмент полезен, когда нужно проверить QR-код перед открытием, получить текст из скриншота, перенести данные из документа или разобраться, почему код плохо сканируется телефоном. Расшифрованный результат не становится автоматически безопасным: ссылки стоит проверять перед переходом, потому что QR-код может вести на фишинг, устаревший ресурс или неожиданный редирект. Изображение обрабатывается локально в браузере. При сомнении результат лучше скопировать и проверить отдельно. При совместном использовании нужно заранее прояснить входные данные, допущения и ожидаемый результат, чтобы вывод не поняли неверно.
Как использовать
Как использовать
- Нажмите на область загрузки, чтобы выбрать изображение QR-кода, или перетащите его
- Также можно вставить изображение из буфера обмена с помощью Ctrl+V (Cmd+V на Mac)
- Инструмент автоматически распознает и декодирует содержимое QR-кода
- Декодированный результат появляется ниже с автоматическим определением типа содержимого (URL или текст)
- Нажмите «Copy Result», чтобы скопировать декодированное содержимое в буфер обмена
Советы по декодированию
- Используйте чёткое изображение с полностью видимым QR-кодом и достаточной тихой зоной вокруг для надёжного распознавания.
- К декодированным ссылкам относитесь осторожно: просмотрите текст и проверьте домен, прежде чем открывать незнакомые URL из QR-кодов.
Применение
Технический принцип
Декодирование QR-кода — это многоэтапный конвейер обработки изображений, который находит код на фотографии или скриншоте, корректирует перспективное искажение, переводит изображение в чёрно-белый формат, считывает сетку модулей, применяет коррекцию ошибок и декодирует данные в соответствии с режимом кодирования. Этот инструмент использует библиотеку jsQR, реализующую полный конвейер на JavaScript в основном потоке браузера. Первый этап — обнаружение трёх поисковых паттернов — характерных маркеров 7x7 «квадрат в квадрате в квадрате» в левом верхнем, правом верхнем и левом нижнем углу каждого QR-кода. jsQR сканирует изображение на наличие последовательностей чередующихся чёрных и белых пикселей, соответствующих соотношению 1:1:3:1:1, характерному для поперечного сечения поискового паттерна, независимо от поворота. После обнаружения трёх поисковых маркеров их центры тяжести определяют ограничивающий четырёхугольник кода. Коррекция перспективы преобразует четырёхугольник в квадратную сетку с помощью матрицы гомографии, вычисляемой из четырёх угловых точек. Это необходимо, потому что QR-коды редко фотографируют строго перпендикулярно — коррекция выпрямляет код так, чтобы каждый модуль (чёрный или белый квадрат, представляющий один бит) попадал на регулярную сетку. Размер модуля определяется размерами поискового паттерна и номером версии, который считывается из полос форматной информации рядом с поисковыми маркерами. Бинаризация изображения преобразует значения оттенков серого в чисто чёрный и белый. jsQR использует адаптивный пороговый метод: вместо одного глобального порога (который не работает при неравномерном освещении или тенях) вычисляются пороги для небольших областей изображения, что делает декодер устойчивым к градиентам и виньетированию, характерным для фотографий со смартфонов. Коррекция ошибок использует коды Рида-Соломона, как указано в ISO/IEC 18004:2015. QR-коды поддерживают четыре уровня коррекции ошибок: L (~7% восстановления), M (~15%), Q (~25%) и H (~30%). Кодовые слова данных и кодовые слова коррекции ошибок чередуются блоками; jsQR выполняет вычисление синдромов и применяет алгоритм Берлекэмпа-Мэсси для обнаружения и исправления ошибок в пределах номинальной ёмкости кода. Если повреждение превышает уровень коррекции, декодирование завершается неудачей, а не возвращает повреждённые данные. Наконец, декодированный битовый поток интерпретируется в соответствии с индикатором режима кодирования в первых четырёх битах: числовой (0001, 10 бит на 3 цифры), буквенно-цифровой (0010, 11 бит на 2 символа), байтовый (0100, 8 бит на символ, обычно UTF-8 или Latin-1), кандзи (1000, 13 бит на символ с использованием Shift JIS) или ECI (0111, Extended Channel Interpretation для указания набора символов). Инструмент отображает декодированную строку и автоматически определяет, является ли она URL (путём попытки разбора через new URL()) или обычным текстом.
- Обнаружение поискового паттерна: jsQR сканирует строки на наличие чередующихся чёрных/белых пиксельных последовательностей, соответствующих соотношению 1:1:3:1:1 — три таких паттерна под примерно прямыми углами подтверждают наличие QR-кода и его ориентацию независимо от поворота.
- Коррекция перспективы: матрица гомографии, вычисленная из четырёх обнаруженных угловых точек, отображает искажённый четырёхугольник на квадратную сетку — этот этап необходим, потому что реальные фотографии редко захватывают QR-коды строго перпендикулярно.
- Адаптивная бинаризация: локальное пороговое разделение делит изображение на небольшие области и вычисляет пороги для каждой области, что делает декодер устойчивым к неравномерному освещению, теням и градиентам, которые вывели бы из строя глобальный порог.
- Коррекция ошибок Рида-Соломона (ISO/IEC 18004): четыре уровня (L/M/Q/H) обеспечивают 7-30% восстановления данных — алгоритм Берлекэмпа-Мэсси определяет позиции ошибок, а алгоритм Форни вычисляет величины коррекций; если повреждение превышает уровень, декодирование завершается чисто.
- Определение режима кодирования: первые четыре бита данных указывают режим — числовой (0001, эффективный для цифр), буквенно-цифровой (0010, для A-Z 0-9 и символов), байтовый (0100, для произвольных данных UTF-8/Latin-1), кандзи (1000, для Shift JIS) и ECI (0111, для спецификации набора символов).
- Версия и сетка модулей: версии QR-кодов варьируются от 1 (21x21 модуль) до 40 (177x177), при этом каждая версия добавляет 4 модуля на сторону — версия считывается из полос форматной информации рядом с поисковыми паттернами, а количество модулей определяет плотность сетки семплирования.
- Выполнение в браузере: изображение отрисовывается на скрытом элементе Canvas, getImageData() извлекает необработанный буфер пикселей RGBA, а jsQR обрабатывает его полностью в основном потоке браузера — данные изображения не загружаются на какой-либо сервер, а canvas удаляется сборщиком мусора после завершения декодирования.
Примеры
QR-код с URL
Считанные данные: https://example.com
Тип: URL
Действие: сканер открывает ссылку в системном браузере после подтвержденияQR-код с обычным текстом
Считанные данные: This is text content
Тип: Текст
Действие: сканер копирует текст в буфер обмена или показывает его в результирующем окнеQR-код с данными WiFi
Считанные данные: WIFI:T:WPA;S:NetworkName;P:Password;;
Тип: WiFi (WPA2)
Действие: телефоны, распознающие формат, предлагают «Подключиться к NetworkName?» и подключаются с указанным паролемКонтактная карточка vCard
Считанные данные: BEGIN:VCARD\nVERSION:3.0\nFN:Jane Doe\nTEL:+1-555-0142\nEMAIL:jane@example.com\nEND:VCARD
Тип: Контактная карточка
Действие: телефоны предлагают создать новую запись в адресной книге из распознанных полейЧасто задаваемые вопросы
Загружается ли изображение для декодирования?
Нет. Декодирование идёт в вашем браузере через WebAssembly или чистый JS. Байты изображения читаются локально; ничего не отправляется на сервер.
Какие способы ввода поддерживаются?
Загрузка файла, вставка изображения из буфера обмена или перетаскивание файла изображения. Изображение обрабатывается в вашем браузере и не передаётся на сервер.
Что возвращает декодер?
Сырой декодированный текст. Страница определяет, является ли результат URL или обычным текстом, и показывает соответствующий бейдж. Если это URL, появляется кнопка «Открыть URL».
Почему мой QR не декодируется?
Частые причины: размытие, низкий контраст, блики, перспективный наклон или код частично закрыт. Подкадрируйте ближе, увеличьте яркость, держите камеру стабильно под 90° к поверхности. QR-коды с уровнем коррекции L почти не переносят повреждений; уровень H терпит существенное перекрытие.
Декодирует ли он QR-коды со скриншотов и из PDF?
Скриншоты обычно декодируются хорошо, потому что у них идеальный контраст и нет перспективных искажений. Для PDF сначала сделайте скриншот участка с QR, затем загрузите изображение.
Стоит ли открывать каждый URL из QR-кода?
Нет. QR-коды — известный вектор фишинга («куишинг»), потому что URL спрятан за визуальным кодом. Перед открытием изучите декодированный URL — страница показывает его полностью, чтобы можно было прочитать домен. Остерегайтесь доменов с опечатками, IP-адресов и ссылок-сократителей, скрывающих настоящий пункт назначения.
Может ли он декодировать несколько QR на одном изображении?
Страница определяет один QR-код на изображение. Если у вас изображение с несколькими кодами, обрежьте каждый отдельно и загрузите по одному — для самого надёжного результата.