En el ámbito del desarrollo web, la eficiencia se vuelve primordial y Rust emerge como un aliado formidable. En este artículo, profundizaremos en el proceso de creación de un script Rust diseñado para comprimir imágenes enlazadas a la web. Nos centraremos principalmente en la conversión al formato WebP y en ejercer un control meticuloso sobre el nivel de calidad.
Preparando el Terreno:
Previo al inicio de la codificación, es imprescindible garantizar la posesión de las herramientas apropiadas. Emplearemos la biblioteca de imágenes para realizar la manipulación de imágenes, mientras utilizamos WebP para la conversión al formato WebP. Incorpore estas dependencias en su archivo Cargo.toml:
[dependencies]
image = "0.23.14"
webp = "0.6.1"
Escribiendo el Script:
Abre el archivo src/main.rs y comienza a escribir el script. Aquí hay un ejemplo básico para comenzar:
extern crate image;
extern crate webp;
use std::env;
use image::{GenericImageView, DynamicImage};
use webp::EncoderBuilder;
fn main() {
let args: Vec<String> = env::args().collect();
if args.len() != 2 {
eprintln!("Uso: {} <input.jpg>", args[0]);
std::process::exit(1);
}
let input_path = &args[1];
let output_path = format!("compressed_{}.webp", input_path);
let quality = 70;
let image = image::open(input_path).expect("Error al abrir la imagen");
let encoded_image = encode_image(image, quality);
encoded_image.write(&output_path).expect("Error al escribir la imagen comprimida");
}
fn encode_image(image: DynamicImage, quality: u32) -> Vec<u8> {
let mut encoded_image = Vec::new();
let encoder = EncoderBuilder::new()
.quality(quality as f32)
.build(&mut encoded_image)
.expect("Error al construir el codificador WebP");
encoder.encode(image.raw_pixels(), image.width(), image.height(), 4 * image.width())
.expect("Error al codificar la imagen");
encoded_image
}
Este script básico usa la biblioteca image para abrir la imagen y la biblioteca webp para codificarla en formato WebP con el nivel de calidad especificado. Ten en cuenta que este es un ejemplo básico y puede requerir ajustes según tus necesidades específicas.
Compilación y Ejecución:
Finalmente, para compilar y ejecutar el script, utiliza:
cargo run -- <input.jpg>
Este script ofrece una base sólida para comprimir imágenes de manera eficiente, aprovechando las capacidades de Rust y permitiéndole adaptar el nivel de calidad a sus necesidades específicas.