Bilder mit Rust-Image prozedural generieren
In diesem Artikel erfahren wir, wie Bilder mithilfe von rust-image prozedural generiert werden.
Bilder mit Rust-Image prozedural generieren
Kistenbild
Diese Kiste bietet native Rust-Implementierungen für die Bildcodierung und -decodierung sowie grundlegende Bildbearbeitungsfunktionen. Zusätzliche Dokumentation ist auch in der Datei README.md
verfügbar, die bequem auf GitHub eingesehen werden kann.
Diese Bibliothek bietet Lösungen für zwei grundlegende Probleme: eine einheitliche Schnittstelle für Bildcodierungen und einfache generische Puffer für deren Inhalt. Jede Funktion ist unabhängig von den anderen nutzbar.
Der Fokus liegt auf einem kleinen, stabilen Satz alltäglicher Operationen, die durch zusätzliche spezialisierte Kisten ergänzt werden können. Darüber hinaus bevorzugt die Bibliothek sichere Lösungen mit wenigen Abhängigkeiten.
So laden Sie ein Bild mit io::Reader
:
use std::io::Cursor;
use image::io::Reader as ImageReader;
let img_one = ImageReader::open("imagetest.png")?.decode()?;
let img_two = ImageReader::new(Cursor::new(bytes)).with_guessed_format()?.decode()?;
So speichern Sie das Bild:
img.save("theimage.jpg")?;
let mut bytes: Vec<u8> = Vec::new();
img2.write_to(&mut Cursor::new(&mut bytes), image::ImageOutputFormat::Png)?;
Bildpuffer
Die beiden primären Bildspeicherformate:
Image buffer
, der statisch typisierte Bilddaten speichert.DynamicImage
ist eine Aufzählung der unterstütztenImageBuffer
-Formate, die Konvertierungen zwischen ihnen unterstützen.
Zusätzlich zu einigen spezialisierten Optionen:
GenericImage
- Merkmal für veränderliche Bildpuffer.- Merkmal
GenericImageView
für schreibgeschützte GenericImage-Referenzen. flat
Modul, das Interoperabilitätstypen für generische Kanalmatrizen und fremde Schnittstellen enthält.
Alle bereitgestellten Bildverarbeitungsfunktionen arbeiten mit Typen, die die Eigenschaften GenericImageView
und GenericImage
implementieren und einen ImageBuffer
zurückgeben. Alle Bildformat-Decoder implementieren die Eigenschaft ImageDecoder
, die grundlegende Methoden zum Abrufen von Bildmetadaten und zum Decodieren von Bildern bietet.
Einige Formate bieten zusätzlich ImageDecoderExt
-Implementierungen an, die es ermöglichen, jeweils nur einen Teil eines Bildes zu decodieren.
Die wichtigsten Dekodierungstechniken sind:
- Abmessungen: Gibt ein Tupel mit der Breite und Höhe des Bildes zurück.
- Farbtyp: Gibt den Farbtyp der von diesem Decoder ausgegebenen Bilddaten zurück.
- Bild lesen: Es dekodiert das gesamte Bild in ein Byte-Array.
Dynamisches Bild
Ein DynamicImage
listet alle unterstützten ImageBuffer<P>
-Typen auf. Sein genauer Bildtyp wird während der Ausführung bestimmt.
Es ist der Typ, der zurückgegeben wird, wenn ein Bild geöffnet wird. DynamicImage
implementiert alle Bildverarbeitungsfunktionen der Einfachheit halber neu.
Für RGBA-Pixel implementiert DynamicImage
die Traits GenericImageView
und GenericImage
.