Генератор 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])) // жёл