Trabalho com imagens em Go: redimensionar e cortar com a biblioteca imaging

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

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/imaging


Depois 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

Recommendations