Trabajo con imágenes en Rust: image, photon-rs y otras bibliotecas

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

Trabajo con imágenes en Rust: bibliotecas, herramientas y ejemplos prácticos



Rust es un lenguaje de programación de sistemas moderno que se utiliza cada vez más para tareas relacionadas con el procesamiento de gráficos e imágenes. Gracias a su alto rendimiento, gestión segura de la memoria y un rico ecosistema de crates, Rust es ideal para crear herramientas de procesamiento de imágenes: desde simples convertidores de formato hasta complejos filtros y algoritmos de visión por computadora.



En este artículo, revisaremos las bibliotecas clave para trabajar con imágenes en Rust, analizaremos sus capacidades y proporcionaremos ejemplos de código funcionales.



Bibliotecas principales para trabajar con imágenes



El ecosistema de Rust ofrece varios crates maduros para el procesamiento de imágenes. Los más populares son:



  • image — biblioteca fundamental para cargar, guardar y realizar transformaciones básicas de imágenes. Soporta PNG, JPEG, GIF, BMP, ICO, TIFF y otros formatos.
  • photon-rs — biblioteca de alto rendimiento para aplicar filtros y efectos fotográficos. Funciona en Rust y WebAssembly.
  • imageproc — extensión de image que proporciona algoritmos avanzados: transformadas de Hough, segmentación, operaciones morfológicas.
  • rusttype — biblioteca para trabajar con fuentes y renderizar texto en imágenes.


Instalación y configuración



Agregue las dependencias al archivo Cargo.toml:



[dependencies]image = "0.25"photon-rs = "0.3"imageproc = "0.25"


Carga, cambio de tamaño y guardado de imágenes



Comencemos con un ejemplo básico: cargaremos una imagen, la reduciremos a la mitad y la guardaremos en otro formato.



use image::{DynamicImage, GenericImageView, ImageFormat};use std::fs::File;

fn main() -> Result<(), Box<dyn std::error::Error>> { // Cargamos la imagen let img = image::open("input.jpg")?; println!("Tamaño: {} x {}", img.width(), img.height());

// Escalamos a la mitad del tamaño original let resized = img.resize_exact( img.width() / 2, img.height() / 2, image::imageops::FilterType::Lanczos3 );

// Guardamos en formato PNG let mut output = File::create("output.png")?; resized.write_to(&mut output, ImageFormat::Png)?;

println!("¡Listo! Guardado como output.png"); Ok(())}


Aplicación de filtros fotográficos con photon-rs



La biblioteca photon-rs permite aplicar filtros, corregir colores y añadir efectos rápidamente.



use photon_rs::PhotonImage;use photon_rs::transform::resize;use photon_rs::filters::filter;

fn main() { // Abrimos la imagen let mut img = photon_rs::open_image("input.jpg");

// Aplicamos el filtro "sepia" filter(&mut img, "sepia", 1.0);

// Cambiamos el brillo photon_rs::channels::brighten(&mut img, 30);

// Cambiamos el tamaño let resized = resize(&img, 800, 600, photon_rs::transform::SamplingFilter::Nearest);

// Guardamos el resultado photon_rs::save_image(resized, "output_photon.jpg"); println!("Filtro aplicado, guardado en output_photon.jpg");}


Trabajo con píxeles y dibujo



A veces es necesario manipular píxeles directamente o dibujar primitivas. Para ello, usamos image junto con imageproc.



use image::{RgbImage, Rgb};use imageproc::drawing::draw_filled_circle_mut;

fn main() { // Creamos una imagen vacía de 400x300 con fondo blanco let mut img = RgbImage::new(400, 300);

// Pintamos el fondo de azul claro for pixel in img.pixels_mut() { *pixel = Rgb([200, 220, 255]); }

// Dibujamos un círculo rojo (x=200, y=150, radio=80) draw_filled_circle_mut( &mut img,\

Recommendations