Biblioteca imaging para Go: redimensionar e cortar imagens
No desenvolvimento web moderno, o processamento de imagens é uma das tarefas principais: desde a criação de miniaturas até a adaptação de imagens para diferentes resoluções de tela. Se você programa em Go (Golang) e procura uma ferramenta simples, mas poderosa, para trabalhar com imagens, dê uma olhada na biblioteca imaging. Ela fornece uma API conveniente para redimensionar (resize), cortar (crop), girar, filtrar e muitas outras operações.
O que é imaging?
imaging é uma biblioteca popular para Go, construída com base no pacote image da biblioteca padrão, mas com uma interface muito mais amigável. Ela suporta os formatos JPEG, PNG, GIF e BMP, e permite realizar operações com o mínimo de código. A principal vantagem é a velocidade de processamento e a facilidade de integração.
Instalação
Para instalar a biblioteca, execute no terminal:
go get -u github.com/disintegration/imagingDepois disso, você poderá importá-la no seu projeto:
import "github.com/disintegration/imaging"Operações principais: redimensionar e cortar
1. Redimensionar (resize)
A função imaging.Resize permite alterar o tamanho da imagem para a largura e altura especificadas. Se precisar manter a proporção, passe 0 para um dos lados — a biblioteca calculará automaticamente o outro.
Exemplo: redimensionar para 300 pixels de largura
package main
import ( "github.com/disintegration/imaging")
func main() { // Abrir a imagem img, err := imaging.Open("input.jpg") if err != nil { panic(err) }
// Alterar a largura para 300px, a altura é ajustada automaticamente resized := imaging.Resize(img, 300, 0, imaging.Lanczos)
// Salvar o resultado err = imaging.Save(resized, "output_resized.jpg") if err != nil { panic(err) }}No exemplo, é usado o filtro imaging.Lanczos — um dos de melhor qualidade para redimensionamento. Você pode escolher outros: NearestNeighbor, Box, Linear, Gaussian, etc.
2. Cortar (crop)
A função imaging.Crop recorta uma área retangular da imagem. É necessário passar as coordenadas do canto superior esquerdo, a largura e a altura da área.
Exemplo: cortar a parte central de 200x200 pixels
package main
import ( "github.com/disintegration/imaging")
func main() { img, err := imaging.Open("input.jpg") if err != nil { panic(err) }
// Calcular as coordenadas para o corte central width := img.Bounds().Dx() height := img.Bounds().Dy() x := (width - 200) / 2 y := (height - 200) / 2
// Cortar cropped := imaging.Crop(img, imaging.Rect(x, y, x+200, y+200))
err = imaging.Save(cropped, "output_cropped.jpg") if err != nil { panic(err) }}Se você precisar apenas cortar para um quadrado centralizado, use imaging.CropCenter:
croppedCenter := imaging.CropCenter(img, 200, 200)Recursos avançados
Além das operações básicas, o imaging oferece:
- Thumbnail — criação de miniaturas mantendo a proporção e preenchendo o fundo.
- Rotate — rotação em qualquer ângulo.
- Flip — espelhamento horizontal ou vertical.
- Blur — desfoque da imagem.
- Sharpen — aumento da nitidez.
- Grayscale — conversão para preto e branco.
Exemplo: criar uma miniatura de 150x150
Também na biblioteca
Parsing de HTML em C++: visão geral das bibliotecas e exemplos de código
Trabalhando com Apache Kafka no Node.js: biblioteca KafkaJS
Laravel Telescope para PHP: guia completo com exemplos práticos
Parsing de HTML em Node.js: bibliotecas Cheerio, JSDOM e Puppeteer
Socket.io para JavaScript (Node.js): guia completo com exemplos
Recommendations