Générateur de QR codes en Rust : création et intégration dans les applications web

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

Générateur de QR codes en Rust : un outil puissant pour votre projet

\n\n

Les QR codes sont devenus une partie intégrante du web moderne : liens, contacts, mots de passe Wi-Fi — tout peut être encodé dans une image carrée. Si vous développez un site éducatif ou un service en Rust, la génération de QR codes peut être une fonctionnalité utile. Dans cet article, nous allons explorer la bibliothèque qrcode pour Rust, apprendre à créer des QR codes, personnaliser leur apparence et les intégrer dans des applications web.

\n\n

Rust est un langage de programmation système apprécié pour ses performances et sa sécurité. La bibliothèque qrcode tire parti de tous les avantages de Rust : elle est rapide, ne nécessite pas de dépendances externes et s'intègre facilement dans n'importe quel projet. Voyons comment générer des QR codes avec elle.

\n\n

Installation et configuration

\n\n

Pour travailler avec les QR codes en Rust, nous avons besoin de la crate qrcode et, si nous devons enregistrer des images, de la crate image. Ajoutez-les au fichier Cargo.toml :

\n\n
[dependencies]\nqrcode = "0.14"\nimage = "0.24"
\n\n

Ensuite, exécutez cargo build pour télécharger les dépendances.

\n\n

Exemple de base : génération d'un QR code dans la console

\n\n

Le premier exemple est le plus simple : nous allons afficher le QR code directement dans le terminal. C'est pratique pour le débogage ou lorsque vous n'avez pas besoin de sauvegarder l'image.

\n\n
use qrcode::QrCode;\nuse qrcode::render::unicode;\n\nfn main() {\n    // Créer un QR code à partir d'une chaîne\n    let code = QrCode::new("https://pythonlib.ru").unwrap();\n\n    // Rendre en caractères Unicode\n    let image = code.render::<unicode::Dense1x2>()\n        .dark_color(unicode::Dense1x2::Dark)\n        .light_color(unicode::Dense1x2::Light)\n        .build();\n\n    println!("{}", image);\n}
\n\n

Dans ce code :

\n
    \n
  • QrCode::new() — crée un QR code à partir d'une chaîne. Si la chaîne est trop longue, la méthode retournera une erreur — utilisez .unwrap() uniquement pour les exemples.
  • \n
  • render::<unicode::Dense1x2> — sélectionne le rendu Unicode. Il affiche le code à l'aide de caractères de pseudo-graphisme.
  • \n
  • dark_color et light_color — définissent les caractères pour les modules sombres et clairs.
  • \n
\n\n

Exécutez le programme — un QR code apparaîtra dans le terminal, que vous pourrez scanner avec votre téléphone.

\n\n

Sauvegarde du QR code en image PNG

\n\n

Pour les projets réels, vous avez besoin d'une image, pas de texte. La bibliothèque qrcode prend en charge le rendu en images matricielles via la crate image.

\n\n
use qrcode::QrCode;\nuse image::Luma;\n\nfn main() {\n    let code = QrCode::new("https://pythonlib.ru").unwrap();\n\n    // Rendre en image (taille du module 8 pixels)\n    let image = code.render::<Luma<u8>>()\n        .min_dimensions(200, 200) // taille minimale\n        .dark_color(Luma([0u8]))   // noir\n        .light_color(Luma([255u8])) // blanc\n        .build();\n\n    // Sauvegarder dans un fichier\n    image.save("qrcode.png").unwrap();\n    println!("QR code sauvegardé dans qrcode.png");\n}
\n\n

Ici :

\n
    \n
  • Luma<u8> — type de pixel pour une image en noir et blanc.
  • \n
  • min_dimensions(200, 200) — définit la largeur et la hauteur minimales. Le QR code est automatiquement mis à l'échelle.
  • \n
  • dark_color et light_color — couleurs des modules (noir et blanc).
  • \n
\n\n

Après l'exécution du programme, un fichier qrcode.png apparaîtra à la racine du projet.

\n\n

Personnalisation de la couleur et de la taille

\n\n

Vous pouvez modifier les couleurs du QR code en utilisant des valeurs RVB. Par exemple, créons un QR code bleu sur fond jaune :

\n\n
use qrcode::QrCode;\nuse image::Rgb;\n\nfn main() {\n    let code = QrCode::new("https://pythonlib.ru").unwrap();\n\n    let image = code.render::<Rgb<u8>>()\n        .min_dimensions(300, 300)\n        .dark_color(Rgb([0, 100, 200]))   // bleu                    

Recommendations