Arbeiten mit Bildern in Rust: Bibliotheken, Werkzeuge und praktische Beispiele
Rust ist eine moderne systemnahe Programmiersprache, die zunehmend für Aufgaben im Bereich Grafik- und Bildverarbeitung eingesetzt wird. Dank hoher Leistung, sicherem Speichermanagement und einem reichhaltigen Ökosystem an Crates eignet sich Rust hervorragend für die Entwicklung von Bildverarbeitungswerkzeugen – von einfachen Formatkonvertern bis hin zu komplexen Filtern und Algorithmen des maschinellen Sehens.
In diesem Artikel betrachten wir die wichtigsten Bibliotheken für die Arbeit mit Bildern in Rust, analysieren ihre Funktionen und zeigen praktische Codebeispiele.
Wichtige Bibliotheken für die Bildverarbeitung
Das Rust-Ökosystem bietet mehrere ausgereifte Crates für die Bildverarbeitung. Die bekanntesten sind:
- image – grundlegende Bibliothek zum Laden, Speichern und für grundlegende Bildtransformationen. Unterstützt PNG, JPEG, GIF, BMP, ICO, TIFF und andere Formate.
- photon-rs – leistungsstarke Bibliothek zum Anwenden von Fotofiltern und Effekten. Funktioniert mit Rust und WebAssembly.
- imageproc – Erweiterung für image, die fortgeschrittene Algorithmen bereitstellt: Hough-Transformationen, Segmentierung, morphologische Operationen.
- rusttype – Bibliothek für die Arbeit mit Schriftarten und das Rendern von Text auf Bildern.
Installation und Einbindung
Fügen Sie die Abhängigkeiten in Ihre Cargo.toml-Datei ein:
[dependencies]image = "0.25"photon-rs = "0.3"imageproc = "0.25"Bild laden, skalieren und speichern
Beginnen wir mit einem einfachen Beispiel – wir laden ein Bild, verkleinern es auf die Hälfte und speichern es in einem anderen Format.
use image::{DynamicImage, GenericImageView, ImageFormat};use std::fs::File;
fn main() -> Result<(), Box<dyn std::error::Error>> { // Bild laden let img = image::open("input.jpg")?; println!("Größe: {} x {}", img.width(), img.height());
// Auf die Hälfte der Originalgröße skalieren let resized = img.resize_exact( img.width() / 2, img.height() / 2, image::imageops::FilterType::Lanczos3 );
// Im PNG-Format speichern let mut output = File::create("output.png")?; resized.write_to(&mut output, ImageFormat::Png)?;
println!("Fertig! Gespeichert als output.png"); Ok(())}Fotofilter mit photon-rs anwenden
Die Bibliothek photon-rs ermöglicht das schnelle Anwenden von Filtern, Farbkorrekturen und Effekten.
use photon_rs::PhotonImage;use photon_rs::transform::resize;use photon_rs::filters::filter;
fn main() { // Bild öffnen let mut img = photon_rs::open_image("input.jpg");
// Sepia-Filter anwenden filter(&mut img, "sepia", 1.0);
// Helligkeit ändern photon_rs::channels::brighten(&mut img, 30);
// Größe ändern let resized = resize(&img, 800, 600, photon_rs::transform::SamplingFilter::Nearest);
// Ergebnis speichern photon_rs::save_image(resized, "output_photon.jpg"); println!("Filter angewendet, gespeichert in output_photon.jpg");}Arbeiten mit Pixeln und Zeichnen
Manchmal ist es notwendig, direkt mit Pixeln zu arbeiten oder primitive Formen zu zeichnen. Dazu verwenden wir image in Kombination mit imageproc.
use image::{RgbImage, Rgb};use imageproc::drawing::draw_filled_circle_mut;
fn main() { // Leeres Bild 400x300 mit weißem Hintergrund erstellen let mut img = RgbImage::new(400, 300);
// Hintergrund hellblau färben for pixel in img.pixels_mut() { *pixel = Rgb([200, 220, 255]); }
// Roten Kreis zeichnen (x=200, y=150, Radius=80) draw_filled_circle_mut( &mut img,\ Auch in der Bibliothek
E-Mail-Versand in Swift (iOS/macOS): MFMailComposeViewController und SMTP
Arbeiten mit ZIP-Archiven in C# (.NET): vollständige Anleitung
Gin für Go: Vollständiger Leitfaden mit Beispielen
Arbeiten mit Excel in PHP: Bibliotheken PhpSpreadsheet, PhpOffice und XLSX-Generierung