Генератор QR-кодов на Rust: создание и интеграция в веб-приложения

Онлайн-тренажер Python для начинающих

Изучайте Python легко и без перегрузки теорией. Решайте практические задачи с автоматической проверкой, получайте подсказки на русском языке и пишите код прямо в браузере — без необходимости что-либо устанавливать.

Начать курс

Генератор QR-кодов на Rust: мощный инструмент для вашего проекта

QR-коды стали неотъемлемой частью современного веба: ссылки, контакты, Wi-Fi-пароли — всё это можно закодировать в квадратном изображении. Если вы разрабатываете образовательный сайт или сервис на Rust, генерация QR-кодов может быть полезной функцией. В этой статье мы рассмотрим библиотеку qrcode для Rust, научимся создавать QR-коды, настраивать их внешний вид и интегрировать в веб-приложения.

Rust — язык системного программирования, который ценится за производительность и безопасность. Библиотека qrcode использует все преимущества Rust: она быстрая, не требует внешних зависимостей и легко встраивается в любой проект. Давайте разберёмся, как с её помощью генерировать QR-коды.

Установка и настройка

Для работы с QR-кодами в Rust нам потребуется крейт qrcode и, если нужно сохранять изображения, крейт image. Добавьте их в файл Cargo.toml:

[dependencies]
qrcode = "0.14"
image = "0.24"

После этого выполните cargo build, чтобы загрузить зависимости.

Базовый пример: генерация QR-кода в консоль

Первый пример — самый простой: мы выведем QR-код прямо в терминал. Это удобно для отладки или когда не требуется сохранять изображение.

use qrcode::QrCode;
use qrcode::render::unicode;

fn main() {
    // Создаём QR-код из строки
    let code = QrCode::new("https://pythonlib.ru").unwrap();

    // Рендерим в Unicode-символы
    let image = code.render::<unicode::Dense1x2>()
        .dark_color(unicode::Dense1x2::Dark)
        .light_color(unicode::Dense1x2::Light)
        .build();

    println!("{}", image);
}

В этом коде:

  • QrCode::new() — создаёт QR-код из строки. Если строка слишком длинная, метод вернёт ошибку — используйте .unwrap() только для примеров.
  • render::<unicode::Dense1x2> — выбирает Unicode-рендерер. Он выводит код с помощью символов псевдографики.
  • dark_color и light_color — задают символы для тёмных и светлых модулей.

Запустите программу — в терминале появится QR-код, который можно отсканировать с телефона.

Сохранение QR-кода в PNG-изображение

Для реальных проектов нужен не текст, а изображение. Библиотека qrcode поддерживает рендеринг в растровые картинки через крейт image.

use qrcode::QrCode;
use image::Luma;

fn main() {
    let code = QrCode::new("https://pythonlib.ru").unwrap();

    // Рендерим в изображение (размер модуля 8 пикселей)
    let image = code.render::<Luma<u8>>()
        .min_dimensions(200, 200) // минимальный размер
        .dark_color(Luma([0u8]))   // чёрный
        .light_color(Luma([255u8])) // белый
        .build();

    // Сохраняем в файл
    image.save("qrcode.png").unwrap();
    println!("QR-код сохранён в qrcode.png");
}

Здесь:

  • Luma<u8> — тип пикселя для чёрно-белого изображения.
  • min_dimensions(200, 200) — задаёт минимальную ширину и высоту. QR-код автоматически масштабируется.
  • dark_color и light_color — цвета модулей (чёрный и белый).

После выполнения программы в корне проекта появится файл qrcode.png.

Настройка цвета и размера

Вы можете менять цвета QR-кода, используя RGB-значения. Например, сделаем синий QR-код на жёлтом фоне:

use qrcode::QrCode;
use image::Rgb;

fn main() {
    let code = QrCode::new("https://pythonlib.ru").unwrap();

    let image = code.render::<Rgb<u8>>()
        .min_dimensions(300, 300)
        .dark_color(Rgb([0, 100, 200]))   // синий
        .light_color(Rgb([255, 255, 0]))  // жёл                    

Рекомендаций