Arbeiten mit Bildern in Rust: Die Bibliothek image und mehr

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

Arbeiten mit Bildern in Rust: Vom Laden bis zur Filterung



Rust ist eine moderne Systemsprache, die nicht nur in der Webentwicklung und Systemprogrammierung, sondern auch im Bereich der Multimediaverarbeitung an Popularität gewinnt. Dank seiner Leistung und Sicherheit eignet sich Rust hervorragend für Aufgaben im Zusammenhang mit Bildern. In diesem Artikel betrachten wir die wichtigsten Bibliotheken und Werkzeuge, die eine effiziente Arbeit mit Rastergrafiken ermöglichen.



Die Hauptbibliothek: image



Die Bibliothek image ist der De-facto-Standard für die Arbeit mit Bildern im Rust-Ökosystem. Sie unterstützt Dutzende von Formaten (PNG, JPEG, GIF, BMP, WebP, TIFF und andere) und bietet eine praktische API zum Laden, Verarbeiten und Speichern von Bildern.



Installation — fügen Sie in Cargo.toml hinzu:



[dependencies]image = "0.25"


Laden und Speichern von Bildern



Betrachten wir die grundlegenden Operationen: Eine Datei öffnen, die Größe ändern und in einem anderen Format speichern.



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

fn main() { // Bild laden let img = image::open("input.jpg").expect("Datei konnte nicht geöffnet werden");

// Informationen ausgeben println!("Größe: {}x{}", img.width(), img.height()); println!("Farbmodus: {:?}", img.color());

// Größe auf 200x200 ändern (unter Beibehaltung der Proportionen) let resized = img.resize(200, 200, image::imageops::FilterType::Lanczos3);

// Als PNG speichern resized.save("output.png").expect("Fehler beim Speichern");}


Grundlegende Verarbeitungsoperationen



Die Bibliothek image bietet das Modul imageops mit einer Reihe vorgefertigter Filter und Transformationen.



  • Drehen und Spiegeln:


use image::DynamicImage;

fn rotate_and_flip(img: &DynamicImage) { // Drehung um 90 Grad im Uhrzeigersinn let rotated = img.rotate90(); // Horizontales Spiegeln let flipped = img.fliph(); // Vertikales Spiegeln let flipped_v = img.flipv();}


  • Zuschneiden (crop):


fn crop_example(img: &DynamicImage) {    // Rechteck zuschneiden: x=50, y=30, Breite=200, Höhe=150    let cropped = img.crop_imm(50, 30, 200, 150);    cropped.save("cropped.png").unwrap();}


  • Helligkeit und Kontrast anpassen:


fn adjust_brightness(img: &DynamicImage) {    // Helligkeit um 50 erhöhen (Wert kann negativ sein)    let brighter = image::imageops::brighten(img, 50);    // Kontrast erhöhen    let contrasted = image::imageops::contrast(img, 1.5);}


Filter und Effekte



Die Bibliothek enthält mehrere integrierte Filter. Hier sind Beispiele für die nützlichsten:



use image::imageops::FilterType;

fn apply_filters(img: &DynamicImage) { // Gaußscher Weichzeichner (sigma = 2.0) let blurred = image::imageops::blur(img, 2.0);

// Schärfung let sharpened = image::imageops::unsharpen(img, 5.0, 2);

// In Graustufen umwandeln let gray = img.grayscale();

// Schwellwertfilter anwenden (Binarisierung) let threshold = image::imageops::threshold(img, 128);

// Alle Ergebnisse speichern blurred.save("blurred.png").unwrap(); sharpened.save("sharpened.png").unwrap(); gray.save("gray.png").unwrap();}


Direkte Arbeit mit Pixeln



Wenn Sie die vollständige Kontrolle über jedes Pixel benötigen, ermöglicht die Bibliothek den Zugriff auf die Rohdaten:



use image::Rgba;

fn pixel_manipulation(mut img: image::RgbaImage) { for pixel in img.pixels_mut() { // Farben invertieren pixel[0] = 255 - pixel[0]; // Rot pixel[1] = 255 - pixel[1];

Empfehlungen