Работа с QR-кодами
{
"title": "QR-коды: возникновение, эволюция и современное применение в Delphi-проектах",
"keywords": "QR-код история разработка, QR-коды Delphi, генерация QR кода, сканирование QR, библиотеки QR Delphi, история QR-кода",
"description": "Подробный разбор истории QR-кодов: от изобретения для автопрома до глобального стандарта. Инструкции по интеграции QR-функций в Delphi: готовые библиотеки, алгоритмы создания и распознавания. Практические примеры кода.",
"html_content": "Проблема: недостаток понимания, как и почему QR-коды стали стандартом, и непонимание путей их интеграции в старые проекты
Разработчики часто сталкиваются с ситуацией, когда требуется добавить поддержку QR-кодов в существующее ПО на Delphi, но отсутствует чёткое представление о том, с чего начать и какие библиотеки выбрать. Многие считают, что QR-код — это некий «готовый чёрный ящик», но не понимают его происхождения и внутреннего устройства, из-за чего совершают ошибки при выборе инструментов.
При попытке сэкономить время разработчики берут первую попавшуюся библиотеку, которая оказывается устаревшей, неподдерживаемой или содержит скрытые лицензионные ограничения. В результате проект либо не компилируется под целевую платформу, либо генерирует некорректные коды, не читаемые реальными сканерами.
Также распространена ситуация, когда заказчик просит «просто сделать QR-код для ссылки», но затем требует исправить дизайн, добавить логотип, повысить помехоустойчивость, и разработчик не может объяснить, какие уровни коррекции ошибок существуют и какой выбрать под задачу.
", "Причины: от истоков — как изобретение для автомобильных заводов определило сегодняшние стандарты
QR-код (Quick Response) был создан в 1994 году японской компанией Denso Wave, входившей в корпорацию Toyota. Задача была практическая: необходимо было быстро считывать информацию о деталях на конвейере, где традиционные штрихкоды уже не справлялись — они читались медленно и не могли содержать достаточный объём данных.
Инженер Масахиро Хара (Masahiro Hara) и его команда разработали двумерный код, способный кодировать до 7089 цифровых символов или до 4296 букв при высокой скорости распознавания. Ключевое решение — размещение трёх «глазков» в углах, позволяющее детектировать код при любом угле поворота. Denso Wave сознательно отказалась от патентной защиты в 1999 году, сделав код свободным для использования.
С тех пор QR-код прошёл путь от производственного инструмента до глобального стандарта ISO/IEC 18004. Сейчас он применяется для оплаты, опросов, рекламы, логистики, цифровых пропусков и даже для криптовалютных транзакций. Это означает, что добавление QR в Delphi-проект сегодня — не опция, а требование рынка, особенно в системах складского учёта, CRM и маркировки товаров.
", "Решение: пошаговый план интеграции QR-кодов в Delphi (анализ, выбор библиотеки, реализация)
Ниже представлен детальный рабочий план, который подходит как для новых проектов, так и для модернизации старых, написанных ещё на Delphi 7. Шаги расположены в строгой последовательности — не пропускайте ни один из них.
Шаг 1. Определите тип операции — генерация или распознавание
Для генерации QR-кода (создание изображения из строки) вам потребуется одна группа библиотек. Для распознавания (декодирование QR с картинки или с веб-камеры) — другая. Наиболее устойчивый выбор — библиотека DelphiZXingQRCode (порт ZXing) для генерации и компонент TVideoCapture или TCam для захвата видео совместно с ZXing.Delphi для декодирования.
", "Шаг 2. Установка и настройка библиотеки DelphiZXingQRCode
Скачайте актуальную версию с официального репозитория GitHub (ветка для Delphi). Добавьте файл DelphiZXingQRCode.pas в ваш проект. Следующий пример создаёт QR-код с содержимым 'Hello World':
uses DelphiZXingQRCode;
var
QRCode: TDelphiZXingQRCode;
Bitmap: TBitmap;
begin
QRCode := TDelphiZXingQRCode.Create;
try
QRCode.Data := 'https://example.com';
QRCode.Encoding := qrAuto;
QRCode.QuietZone := 4;
Bitmap := QRCode.GenerateImage(5);
Image1.Picture.Bitmap := Bitmap;
finally
QRCode.Free;
end;
end;
Параметр GenerateImage(5) задаёт масштаб одного модуля в пикселях. Уровень коррекции по умолчанию — L (7%), но его можно изменить свойством ErrorCorrection. Для логотипов оставляйте уровень не ниже M (15%).
", "Шаг 3. Распознавание QR-кода с помощью видеокамеры (ZXing.Delphi + DirectShow)
Для декодирования с веб-камеры используйте ZXing.Delphi (скачать с официального репозитория). Потребуется компонент VFW (Video for Windows) или DirectShow.
- Загрузите ZXing.Delphi.pas и ZXing.ReadResult.pas.
- Создайте таймер для анализа текущего кадра (частотой 200-300 мс):
- Используйте код: ReadResult := TScanManager.ScanBitmap(Bitmap);
- ReadResult — запись, содержащая поля Text, Points и Format.
- Выводите результат в TEdit: Edit1.Text := ReadResult.Text.
Важный нюанс: ZXing.Delphi работает с 24-битными битмапами. Если используется 8-битное или 32-битное изображение, выполните конвертацию через TBitmap.PixelFormat := pf24bit.
", "Шаг 4. Выбор уровня коррекции ошибок под конкретную задачу
В стандарте ISO/IEC 18004 определено 4 уровня коррекции. Вот точные характеристики:
- Уровень L — восстановление до 7% повреждений. Подходит для печатных материалов без дефектов.
- Уровень M — до 15% повреждений. Оптимален для большинства бизнес-задач, включая нанесение на пластик.
- Уровень Q — до 25% повреждений. Обязателен при размещении логотипа внутри QR-кода (площадь логотипа до 30%).
- Уровень H — до 30% повреждений. Используется в сложных условиях: химическая среда, царапины, дешёвая печать.
Результат: стабильная работа QR-функционала в любом Delphi-проекте, совместимость с современными сканерами
После внедрения описанного подхода ваш проект получает критические преимущества:
- Генерация QR-кодов, соответствующих международному стандарту ISO/IEC 18004, что гарантирует их считываемость любым устройством — от заводского сканера до смартфона клиента.
- Распознавание кодов с частотой 3-5 кадров в секунду на камерах 0.3 Мп без задержек интерфейса.
- Возможность массового перекодирования данных (например, более 5000 QR/час) по сравнению со скоростью «ручного» ввода — более чем в 20 раз быстрее.
- Снижение числа ошибок ввода до фактического нуля — исключается человеческий фактор.
Дополнительно вы можете легко добавить функционал генерации QR-парсеров для собственных маркировок, привязки к базам данных и прочих тонких настроек, не отходя от стандарта.
", "Заключение: почему знание истории и стандарта — залог успешной интеграции
QR-код перестал быть просто «квадратиком со штрихами». Это полноценный протокол передачи данных, развитие которого продолжается. В 2026 году ожидается расширение цветовых кодов и внедрение новых методов коррекции для гибких носителей — если вы уже работаете с QR сегодня, ваша кодовая база останется совместимой завтра.
Начните с малого: скопируйте пример генерации из этой статьи в свой проект, замените строку на свои данные, напечатайте код и отсканируйте телефоном. Когда вы увидите, что все работает «из коробки», вы сможете двигаться дальше — к кастомным логотипам, автоматической выгрузке в Excel и интеграции с облачными API.
Источники, которые стоит изучить: официальная документация ZXing на GitHub (раздел для Delphi), спецификация ISO/IEC 18004:2015, а также архив патентов Denso Wave.
" }Добавлено: 27.04.2026
