Génération procédurale d'images à l'aide de Rust-Image
Dans cet article, nous allons apprendre à générer des images de manière procédurale à l’aide de rust-image.
Génération procédurale d’images à l’aide de Rust-Image
Image de la caisse
Cette caisse fournit des implémentations Rust natives pour l’encodage et le décodage d’images et les fonctions fondamentales de manipulation d’images. Une documentation supplémentaire est également disponible dans le fichier README.md
, consultable facilement sur GitHub.
Cette bibliothèque apporte des solutions à deux problèmes fondamentaux : une interface unifiée pour les encodages d’images et des tampons génériques simples pour leur contenu. Chaque fonctionnalité est utilisable indépendamment des autres.
L’accent est mis sur un petit ensemble stable d’opérations quotidiennes que des caisses spécialisées supplémentaires peuvent compléter. De plus, la bibliothèque privilégie les solutions sécurisées avec peu de dépendances.
Pour charger l’image en utilisant 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()?;
Pour enregistrer l’image :
img.save("theimage.jpg")?;
let mut bytes: Vec<u8> = Vec::new();
img2.write_to(&mut Cursor::new(&mut bytes), image::ImageOutputFormat::Png)?;
Tampons d’image
Les deux principaux formats de stockage d’images :
Image buffer
qui stocke les données d’image typées statiquement.DynamicImage
est une énumération sur les formatsImageBuffer
pris en charge qui prennent en charge les conversions entre eux.
En plus de quelques options spécialisées :
- Trait
GenericImage
pour les tampons d’image modifiables. - Trait
GenericImageView
pour les références GenericImage en lecture seule. - Module
flat
contenant les types d’interopérabilité pour les matrices de canaux génériques et les interfaces étrangères.
Toutes les fonctions de traitement d’image fournies opèrent sur des types qui implémentent les caractéristiques GenericImageView
et GenericImage
et renvoient un ImageBuffer.
. Tous les décodeurs de format d’image implémentent le trait ImageDecoder
, qui offre des méthodes fondamentales pour récupérer les métadonnées d’image et décoder les images.
Certains formats proposent en plus des implémentations ImageDecoderExt
qui permettent de ne décoder qu’une partie d’une image à la fois.
Les techniques de décodage les plus cruciales sont :
- Dimensions : renvoie un tuple avec la largeur et la hauteur de l’image.
- type de couleur : Renvoie le type de couleur de la sortie de données d’image par ce décodeur.
- image de lecture : il décode l’image entière dans un tableau d’octets.
Image dynamique
Une DynamicImage
énumère tous les types ImageBuffer<P>
supportés. Son type d’image précis est déterminé lors de l’exécution.
C’est le type qui est renvoyé lorsqu’une image est ouverte. DynamicImage
réimplémente toutes les fonctions de traitement d’image pour plus de commodité.
Pour les pixels RGBA, DynamicImage
implémente les traits GenericImageView
et GenericImage
.