Generar imágenes de manera procesal usando Rust-Image
En este artículo, aprenderemos a generar imágenes de manera procesal usando rust-image.
Generar imágenes de manera procesal usando Rust-Image
Imagen de caja
Esta caja proporciona implementaciones nativas de Rust para la codificación y decodificación de imágenes y funciones fundamentales de manipulación de imágenes. La documentación adicional también está disponible en el archivo README.md
, que se puede ver convenientemente en GitHub.
Esta biblioteca proporciona soluciones para dos problemas fundamentales: una interfaz unificada para codificaciones de imágenes y búferes genéricos simples para su contenido. Cada función se puede utilizar independientemente de las demás.
La atención se centra en un conjunto pequeño y estable de operaciones cotidianas que pueden complementar cajas especializadas adicionales. Además, la biblioteca favorece las soluciones seguras con pocas dependencias.
Para cargar una imagen usando 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()?;
Para guardar la imagen:
img.save("theimage.jpg")?;
let mut bytes: Vec<u8> = Vec::new();
img2.write_to(&mut Cursor::new(&mut bytes), image::ImageOutputFormat::Png)?;
Búferes de imagen
Los dos formatos principales de almacenamiento de imágenes:
Image buffer
que almacena datos de imagen tipificados estáticamente.DynamicImage
es una enumeración de los formatosImageBuffer
admitidos que admiten conversiones entre ellos.
Además de algunas opciones especializadas:
- Rasgo
GenericImage
para búferes de imágenes mutables. - Rasgo
GenericImageView
para referencias GenericImage de solo lectura. - Módulo
flat
que contiene tipos de interoperabilidad para matrices de canales genéricos e interfaces foráneas.
Todas las funciones de procesamiento de imágenes provistas operan en tipos que implementan las características GenericImageView
y GenericImage
y devuelven un ImageBuffer.
. Todos los decodificadores de formato de imagen implementan el rasgo ImageDecoder
, que ofrece métodos fundamentales para recuperar metadatos de imágenes y decodificar imágenes.
Algunos formatos también ofrecen implementaciones ImageDecoderExt
que permiten decodificar solo una parte de una imagen a la vez.
Las técnicas de decodificación más cruciales son:
- Dimensiones: Devuelve una tupla con el ancho y alto de la imagen.
- tipo de color: devuelve el tipo de color de los datos de imagen emitidos por este decodificador.
- leer imagen: decodifica la imagen completa en una matriz de bytes.
DynamicImage
Una DynamicImage
enumera todos los tipos compatibles de ImageBuffer<P>
. Su tipo de imagen precisa se determina durante la ejecución.
Es el tipo que se devuelve cuando se abre una imagen. DynamicImage
vuelve a implementar todas las funciones de procesamiento de imágenes para mayor comodidad.
Para píxeles RGBA, DynamicImage
implementa los rasgos GenericImageView
y GenericImage
.