Generar imágenes de manera procesal usando Rust-Image

Nilesh Katuwal 7 junio 2022
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:

  1. Image buffer que almacena datos de imagen tipificados estáticamente.
  2. DynamicImage es una enumeración de los formatos ImageBuffer admitidos que admiten conversiones entre ellos.

Además de algunas opciones especializadas:

  1. Rasgo GenericImage para búferes de imágenes mutables.
  2. Rasgo GenericImageView para referencias GenericImage de solo lectura.
  3. 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:

  1. Dimensiones: Devuelve una tupla con el ancho y alto de la imagen.
  2. tipo de color: devuelve el tipo de color de los datos de imagen emitidos por este decodificador.
  3. 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.