qr-code-generator
Многоязычная библиотека для создания QR-кодов. Она предоставляет чистую и корректную реализацию генерации QR-кодов в соответствии со стандартом ISO/IEC 18004. Библиотека доступна на нескольких языках программирования с единообразным API и ориентирована на гибкость, точность и компактность реализации.
Особенности
- поддержка всех 40 версий и всех 4 уровней коррекции ошибок согласно стандарту QR Code Model 2;
- доступна на 6 языках программирования с практически идентичной функциональностью: Java, TypeScript/JavaScript, Python, Rust, C++, C;
- возможность повышения уровня коррекции ошибок без увеличения версии;
- поддержка числового и буквенно-цифрового режимов для более компактного кодирования.
Основные компоненты
Библиотека предоставляет высокоуровневый API для кодирования текстовых и бинарных данных, а также низкоуровневый для ручного управления сегментами (подробнее с документацией можно ознакомиться здесь).
Кодирование текстовых и бинарных данных
Основной способ создания QR-кода — использование функций высокого уровня, которые принимают строку или бинарные данные и возвращают готовый QR-код с автоматически подобранными параметрами.
Основные функции:
encodeText()/encode_text()— создание QR-кода из текстовой строки;encodeBinary()/encode_binary()— создание QR-кода из бинарных данных;- автоматический выбор минимальной версии, вмещающей данные;
- возможность повышения уровня коррекции ошибок без увеличения версии.
Ручное управление сегментами
Для более тонкого контроля над процессом кодирования библиотека предоставляет API для создания последовательности сегментов данных с возможностью переключения между режимами.
Основные возможности:
makeSegments()/make_segments()— создание сегментов из текста с автоматическим выбором оптимального режима для каждой части;encodeSegments()/encode_segments()— создание QR-кода из заранее подготовленных сегментов;- поддержка ECI сегментов для указания кодировки (во всех языках кроме C);
- возможность задания минимальной и максимальной версии, маски и флага повышения уровня коррекции.
Работа с модулями QR-кода
Сгенерированный QR-код предоставляет методы для доступа к его параметрам и отдельным модулям (пикселям), что позволяет визуализировать его любым способом.
Основные методы:
getSize()/get_size()— получение размера QR-кода в модулях (от 21 до 177);getModule(x, y)/get_module(x, y)— получение цвета модуля (true — тёмный, false — светлый);toSvgString()/to_svg_str()— генерация SVG-представления (доступно во всех языках, кроме C).
C/C++ API
Реализация на C и C++ имеет ряд особенностей, связанных с работой без динамического выделения памяти.
Особенности C/C++ API:
- C++: классы
QrCodeиQrSegmentс методамиencodeText(),encodeBinary(),encodeSegments(); - C: функции с префиксом
qrcodegen_, работающие с предоставленными пользователем буферами фиксированного размера; - полное отсутствие аллокации в куче (
malloc), все структуры размещаются в стеке или в буферах, переданных вызывающим кодом; - предопределённые константы:
qrcodegen_BUFFER_LEN_FOR_VERSION(n)иqrcodegen_BUFFER_LEN_MAXдля расчёта размера буферов.
Дополнительные возможности (Java)
В Java-версии доступны расширенные функции:
- кодирование японского текста в режиме Kanji для значительной экономии места по сравнению с UTF-8;
- вычисление оптимального переключения режимов для текста, содержащего смесь чисел, буквенно-цифровых символов и общих данных;
- генерация растрового изображения (
BufferedImage) непосредственно из QR-кода.