Trabalho com imagens em Rust: image, photon-rs e outras bibliotecas

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

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,\

Recommendations