Генератор QR-кодов на C++: полное руководство
QR-коды стали неотъемлемой частью современного веба и мобильных приложений. Они используются для быстрого перехода по ссылкам, передачи контактных данных, оплаты и аутентификации. Если вы разрабатываете на C++ и нуждаетесь во встроенном генераторе QR-кодов — без внешних сервисов и API — эта статья для вас. Мы разберём две основные библиотеки: libqrencode (низкоуровневая, гибкая) и CQRcode (высокоуровневая, с выводом в PNG).
Зачем генерировать QR-коды на C++?
Основные сценарии использования:
- Офлайн-генерация в десктопных приложениях (учёт товаров, билеты).
- Встраивание в серверные решения на C++ (высокая производительность).
- Работа с ограниченными ресурсами (встраиваемые системы, микроконтроллеры).
- Полный контроль над процессом кодирования и коррекции ошибок.
Библиотека libqrencode
libqrencode — самая популярная C/C++ библиотека для создания QR-кодов. Она реализует стандарт ISO/IEC 18004, поддерживает все версии (1–40) и уровни коррекции ошибок (L, M, Q, H). Библиотека компактна, не требует зависимостей и работает на Linux, macOS и Windows (через MinGW или MSVC).
Установка
# Linux (Debian/Ubuntu)
sudo apt install libqrencode-dev
# macOS (Homebrew)
brew install libqrencode
# Windows (vcpkg)
vcpkg install libqrencode
Пример генерации QR-кода в массив байтов (черно-белое изображение)
#include <qrencode.h>
#include <iostream>
#include <vector>
int main() {
// Создаём QR-код для строки "https://pythonlib.ru"
QRcode *qr = QRcode_encodeString("https://pythonlib.ru", 0, QR_ECLEVEL_M, QR_MODE_8, 1);
if (!qr) {
std::cerr << "Ошибка создания QR-кода\n";
return 1;
}
int width = qr->width;
std::cout << "Размер QR-кода: " << width << "x" << width << "\n";
// Данные: qr->data — массив байтов (0 или 1)
for (int y = 0; y < width; ++y) {
for (int x = 0; x < width; ++x) {
bool black = (qr->data[y * width + x] & 0x01);
std::cout << (black ? "██" : " ");
}
std::cout << "\n";
}
QRcode_free(qr);
return 0;
}
Этот код выводит QR-код в консоль символами. Для сохранения в PNG или BMP потребуется дополнительная обработка.
Библиотека CQRcode
CQRcode — надстройка над libqrencode, которая умеет сразу сохранять результат в PNG-файл. Идеально подходит, если вам нужен готовый графический файл без лишнего кода. Поддерживает настройку цвета, размера модуля и добавление центрального логотипа.
Установка
# Скачайте исходники с GitHub: https://github.com/rickyzhang82/CQRcode
# Сборка через CMake:
mkdir build && cd build
cmake ..
make
sudo make install
Пример сохранения QR-кода в PNG
#include <CQRcode.h>
int main() {
// Создаём объект генератора
CQRcode qr;
// Устанавливаем данные (URL, текст или vCard)
qr.setData("BEGIN:VCARD\nVERSION:3.0\nFN:PythonLib\nURL:https://pythonlib.ru\nEND:VCARD");
// Настраиваем параметры
qr.setModuleSize(8); // размер одного модуля в пикселях
qr.setMargin(4); // отступ (белая рамка)
qr.setCorrectionLevel(QR_ECLEVEL_H); // максимальная коррекция ошибок
// Сохраняем в файл
if (qr.savePNG("pythonlib_qr.png")) {
// Успешно
} else {
// Ошибка
}
return 0;
}
Сравнение библиотек
- libqrencode — минималистичная, даёт сырые данные. Требует
Также в библиотеке
Обработка изображений в Java: библиотеки и примеры кода
Quartz Scheduler для Java: полное руководство с примерами
Swagger/OpenAPI генерация для Swift: инструменты и библиотеки
GuzzleHTTP/Promises для PHP: полное руководство с примерами