Генератор QR-кодов на Rust: библиотека qr_code

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

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

Начать курс

Генератор QR-кодов на Rust: библиотека qr_code

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

Что такое библиотека qr_code?

qr_code — это чистая Rust-библиотека для генерации QR-кодов (версия 2) без внешних зависимостей. Она позволяет создавать QR-коды из строковых данных, настраивать уровень коррекции ошибок, размер модуля и цвет. Библиотека поддерживает вывод в формате SVG, PNG (через image) и в виде ASCII-графики для терминала. Основные преимущества:

  • Высокая производительность (Rust без GC).
  • Минимальное потребление памяти.
  • Поддержка всех четырех уровней коррекции ошибок (L, M, Q, H).
  • Гибкая настройка внешнего вида QR-кода.

Установка

Добавьте зависимость в ваш Cargo.toml:

[dependencies]
qr_code = "0.2.0"

Если вам нужен вывод в PNG, дополнительно установите крейт image:

image = "0.24"

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

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

Самый простой способ получить QR-код — сохранить его в векторном формате SVG. Ниже приведен минимальный рабочий пример:

use qr_code::QrCode;

fn main() {
    // Создаем QR-код из строки
    let code = QrCode::new("https://pythonlib.ru").unwrap();
    
    // Генерируем SVG-строку с размером модуля 8 пикселей
    let svg = code.to_svg().with_width(8).to_string();
    
    // Сохраняем в файл
    std::fs::write("qrcode.svg", svg).unwrap();
    println!("QR-код сохранен в qrcode.svg");
}

После запуска вы получите файл qrcode.svg, который можно открыть в браузере или вставить в HTML-страницу.

Настройка уровня коррекции ошибок

Уровень коррекции определяет, насколько сильно QR-код может быть поврежден, но при этом оставаться читаемым. Библиотека поддерживает четыре уровня:

  • ErrorCorrection::Low — 7% данных могут быть восстановлены.
  • ErrorCorrection::Medium — 15%.
  • ErrorCorrection::Quartile — 25%.
  • ErrorCorrection::High — 30%.

Пример использования:

use qr_code::{QrCode, ErrorCorrection};

let code = QrCode::with_error_correction(
    "Секретный код",
    ErrorCorrection::High
).unwrap();

let svg = code.to_svg().with_width(10).to_string();
std::fs::write("secret_qr.svg", svg).unwrap();

Генерация QR-кода в PNG (растровое изображение)

Для вывода в PNG потребуется крейт image. Сначала добавьте его в Cargo.toml, затем используйте следующий код:

use qr_code::QrCode;
use image::{Luma, ImageBuffer};

fn main() {
    let code = QrCode::new("Rust is awesome!").unwrap();
    
    // Создаем изображение: каждый модуль = 10 пикселей
    let size = code.width() * 10;
    let mut img = ImageBuffer::new(size as u32, size as u32);
    
    // Заливаем белым фоном
    for pixel in img.pixels_mut() {
        *pixel = Luma([255u8]);
    }
    
    // Рисуем черные модули
    for y in 0..code.width() {
        for x in 0..code.width() {
            if code[(x, y)] {
                let px = x as u32 * 10;
                let py = y as u32 * 10;
                for dy in 0..10 {
                    for dx in 0..10 {
                        img.put_pixel(px + dx, py + dy, Luma([0u8]));
                    }
                }
            }
        }
    }
    
    img.save("qrcode.png").unwrap();
    println!("PNG сохранен!");
}

Настройка цвета и размера модуля

При генерации SVG можно из

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