Trabalho com imagens em Rust: bibliotecas, ferramentas e exemplos práticos
Rust é uma linguagem de programação de sistemas moderna, cada vez mais utilizada para tarefas relacionadas ao processamento de gráficos e imagens. Graças ao seu alto desempenho, gerenciamento seguro de memória e rico ecossistema de crates, Rust é ideal para criar ferramentas de processamento de imagens: desde simples conversores de formato até filtros complexos e algoritmos de visão computacional.
Neste artigo, exploraremos as principais bibliotecas para trabalhar com imagens em Rust, analisaremos seus recursos e forneceremos exemplos de código funcionais.
Principais bibliotecas para trabalhar com imagens
O ecossistema Rust oferece várias crates maduras para processamento de imagens. As mais populares são:
- image — biblioteca fundamental para carregar, salvar e realizar transformações básicas em imagens. Suporta PNG, JPEG, GIF, BMP, ICO, TIFF e outros formatos.
- photon-rs — biblioteca de alto desempenho para aplicar filtros e efeitos fotográficos. Funciona em Rust e WebAssembly.
- imageproc — extensão para image, fornecendo algoritmos avançados: transformada de Hough, segmentação, operações morfológicas.
- rusttype — biblioteca para trabalhar com fontes e renderizar texto em imagens.
Instalação e configuração
Adicione as dependências ao arquivo Cargo.toml:
[dependencies]image = "0.25"photon-rs = "0.3"imageproc = "0.25"Carregar, redimensionar e salvar uma imagem
Vamos começar com um exemplo básico — carregar uma imagem, reduzir seu tamanho pela metade e salvá-la em outro formato.
use image::{DynamicImage, GenericImageView, ImageFormat};use std::fs::File;
fn main() -> Result<(), Box<dyn std::error::Error>> { // Carrega a imagem let img = image::open("input.jpg")?; println!("Tamanho: {} x {}", img.width(), img.height());
// Redimensiona para metade do tamanho original let resized = img.resize_exact( img.width() / 2, img.height() / 2, image::imageops::FilterType::Lanczos3 );
// Salva no formato PNG let mut output = File::create("output.png")?; resized.write_to(&mut output, ImageFormat::Png)?;
println!("Pronto! Salvo como output.png"); Ok(())}Aplicando filtros fotográficos com photon-rs
A biblioteca photon-rs permite aplicar filtros rapidamente, ajustar cores e adicionar efeitos.
use photon_rs::PhotonImage;use photon_rs::transform::resize;use photon_rs::filters::filter;
fn main() { // Abre a imagem let mut img = photon_rs::open_image("input.jpg");
// Aplica o filtro "sépia" filter(&mut img, "sepia", 1.0);
// Ajusta o brilho photon_rs::channels::brighten(&mut img, 30);
// Redimensiona let resized = resize(&img, 800, 600, photon_rs::transform::SamplingFilter::Nearest);
// Salva o resultado photon_rs::save_image(resized, "output_photon.jpg"); println!("Filtro aplicado, salvo em output_photon.jpg");}Trabalhando com pixels e desenho
Às vezes é necessário manipular pixels diretamente ou desenhar primitivas. Para isso, usamos image em conjunto com imageproc.
use image::{RgbImage, Rgb};use imageproc::drawing::draw_filled_circle_mut;
fn main() { // Cria uma imagem vazia de 400x300 com fundo branco let mut img = RgbImage::new(400, 300);
// Pinta o fundo de azul claro for pixel in img.pixels_mut() { *pixel = Rgb([200, 220, 255]); }
// Desenha um círculo vermelho (x=200, y=150, raio=80) draw_filled_circle_mut( &mut img,\ Também na biblioteca
GuzzleHTTP/Promises PHP: guia completo com exemplos práticos
Registro em Java: visão geral das melhores bibliotecas e soluções
Trabalho com imagens em Rust: redimensionar e cortar com a biblioteca image
InversifyJS: Contêiner IoC para aplicações TypeScript