Travailler avec les images en Rust : la bibliothèque image et bien plus

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

Travailler avec les images en Rust : du chargement au filtrage



Rust est un langage système moderne qui gagne en popularité non seulement dans le développement web et la programmation système, mais aussi dans le domaine du traitement multimédia. Grâce à ses performances et sa sécurité, Rust est parfaitement adapté aux tâches liées aux images. Dans cet article, nous examinerons les bibliothèques et outils clés qui permettent de travailler efficacement avec les graphiques raster.



Bibliothèque principale : image



La bibliothèque image est la norme de facto pour travailler avec les images dans l'écosystème Rust. Elle prend en charge des dizaines de formats (PNG, JPEG, GIF, BMP, WebP, TIFF et autres) et fournit une API pratique pour charger, traiter et sauvegarder des images.



Installation — ajoutez dans Cargo.toml :



[dependencies]image = "0.25"


Chargement et sauvegarde d'images



Examinons les opérations de base : ouvrir un fichier, redimensionner et sauvegarder dans un autre format.



use image::{DynamicImage, GenericImageView};use std::path::Path;

fn main() { // Chargeons l'image let img = image::open("input.jpg").expect("Impossible d'ouvrir le fichier");

// Affichons les informations println!("Taille : {}x{}", img.width(), img.height()); println!("Mode couleur : {:?}", img.color());

// Redimensionnons à 200x200 (en conservant les proportions) let resized = img.resize(200, 200, image::imageops::FilterType::Lanczos3);

// Sauvegardons en PNG resized.save("output.png").expect("Erreur de sauvegarde");}


Opérations de traitement principales



La bibliothèque image fournit le module imageops avec un ensemble de filtres et transformations prêts à l'emploi.



  • Rotation et retournement :


use image::DynamicImage;

fn rotate_and_flip(img: &DynamicImage) { // Rotation de 90 degrés dans le sens horaire let rotated = img.rotate90(); // Retournement horizontal let flipped = img.fliph(); // Retournement vertical let flipped_v = img.flipv();}


  • Recadrage (crop) :


fn crop_example(img: &DynamicImage) {    // Recadrons un rectangle : x=50, y=30, largeur=200, hauteur=150    let cropped = img.crop_imm(50, 30, 200, 150);    cropped.save("cropped.png").unwrap();}


  • Modification de la luminosité et du contraste :


fn adjust_brightness(img: &DynamicImage) {    // Augmentons la luminosité de 50 (la valeur peut être négative)    let brighter = image::imageops::brighten(img, 50);    // Augmentons le contraste    let contrasted = image::imageops::contrast(img, 1.5);}


Filtres et effets



La bibliothèque inclut plusieurs filtres intégrés. Voici des exemples des plus utiles :



use image::imageops::FilterType;

fn apply_filters(img: &DynamicImage) { // Flou gaussien (sigma = 2.0) let blurred = image::imageops::blur(img, 2.0);

// Accentuation de la netteté let sharpened = image::imageops::unsharpen(img, 5.0, 2);

// Conversion en niveaux de gris let gray = img.grayscale();

// Application d'un filtre de seuil (binarisation) let threshold = image::imageops::threshold(img, 128);

// Sauvegardons tous les résultats blurred.save("blurred.png").unwrap(); sharpened.save("sharpened.png").unwrap(); gray.save("gray.png").unwrap();}


Travailler directement avec les pixels



Si vous avez besoin d'un contrôle total sur chaque pixel, la bibliothèque permet d'accéder aux données brutes :



use image::Rgba;

fn pixel_manipulation(mut img: image::RgbaImage) { for pixel in img.pixels_mut() { // Inversons les couleurs pixel[0] = 255 - pixel[0]; // Rouge pixel[1] = 255 - pixel[1];

Recommendations