Travail avec les images en Rust : image, photon-rs et autres bibliothèques

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

Travail avec les images en Rust : bibliothèques, outils et exemples pratiques



Rust est un langage de programmation système moderne, de plus en plus utilisé pour les tâches liées au traitement graphique et d'images. Grâce à ses hautes performances, sa gestion sécurisée de la mémoire et son riche écosystème de crates, Rust est parfaitement adapté à la création d'outils de traitement d'images : des simples convertisseurs de formats aux filtres complexes et algorithmes de vision par ordinateur.



Dans cet article, nous examinerons les bibliothèques clés pour travailler avec les images en Rust, analyserons leurs fonctionnalités et fournirons des exemples de code fonctionnels.



Bibliothèques principales pour le travail avec les images



L'écosystème Rust propose plusieurs crates matures pour le traitement d'images. Les plus populaires sont :



  • image — la bibliothèque fondamentale pour charger, sauvegarder et effectuer des transformations de base sur les images. Elle prend en charge les formats PNG, JPEG, GIF, BMP, ICO, TIFF et autres.
  • photon-rs — une bibliothèque haute performance pour appliquer des filtres photo et des effets. Elle fonctionne avec Rust et WebAssembly.
  • imageproc — une extension pour image, fournissant des algorithmes avancés : transformations de Hough, segmentation, opérations morphologiques.
  • rusttype — une bibliothèque pour travailler avec les polices et le rendu de texte sur les images.


Installation et configuration



Ajoutez les dépendances dans le fichier Cargo.toml :



[dependencies]image = "0.25"photon-rs = "0.3"imageproc = "0.25"


Chargement, redimensionnement et sauvegarde d'une image



Commençons par un exemple de base : chargeons une image, réduisons-la de moitié et sauvegardons-la dans un autre format.



use image::{DynamicImage, GenericImageView, ImageFormat};use std::fs::File;

fn main() -> Result<(), Box<dyn std::error::Error>> { // Chargeons l'image let img = image::open("input.jpg")?; println!("Taille : {} x {}", img.width(), img.height());

// Redimensionnons à la moitié de la taille originale let resized = img.resize_exact( img.width() / 2, img.height() / 2, image::imageops::FilterType::Lanczos3 );

// Sauvegardons au format PNG let mut output = File::create("output.png")?; resized.write_to(&mut output, ImageFormat::Png)?;

println!("Terminé ! Sauvegardé sous output.png"); Ok(())}


Application de filtres photo avec photon-rs



La bibliothèque photon-rs permet d'appliquer rapidement des filtres, de corriger les couleurs et d'ajouter des effets.



use photon_rs::PhotonImage;use photon_rs::transform::resize;use photon_rs::filters::filter;

fn main() { // Ouvrons l'image let mut img = photon_rs::open_image("input.jpg");

// Appliquons le filtre "sépia" filter(&mut img, "sepia", 1.0);

// Modifions la luminosité photon_rs::channels::brighten(&mut img, 30);

// Redimensionnons let resized = resize(&img, 800, 600, photon_rs::transform::SamplingFilter::Nearest);

// Sauvegardons le résultat photon_rs::save_image(resized, "output_photon.jpg"); println!("Filtre appliqué, sauvegardé sous output_photon.jpg");}


Travail avec les pixels et le dessin



Il est parfois nécessaire de manipuler directement les pixels ou de dessiner des primitives. Pour cela, utilisons image en combinaison avec imageproc.



use image::{RgbImage, Rgb};use imageproc::drawing::draw_filled_circle_mut;

fn main() { // Créons une image vide de 400x300 avec un fond blanc let mut img = RgbImage::new(400, 300);

// Remplissons le fond en bleu clair for pixel in img.pixels_mut() { *pixel = Rgb([200, 220, 255]); }

// Dessinons un cercle rouge (x=200, y=150, rayon=80) draw_filled_circle_mut( &mut img,\

Recommendations