Trabalho com imagens em Go (Golang): image, draw, imaging, resize

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 Go (Golang): do básico às ferramentas avançadas



Go (Golang) oferece poderosos recursos nativos para trabalhar com gráficos raster, além de um rico ecossistema de bibliotecas de terceiros. Neste artigo, abordaremos tanto os pacotes padrão image, image/color, image/draw e image/png, quanto as bibliotecas populares imaging, resize e gg para resolver tarefas comuns: carregar, redimensionar, sobrepor, desenhar e salvar imagens.



Pacotes padrão do Go para trabalho com imagens



A biblioteca padrão do Go fornece tipos e funções básicas para trabalhar com imagens, cobrindo 80% das tarefas do dia a dia.



  • image — define a interface Image e tipos concretos: RGBA, NRGBA, Gray, Paletted e outros.
  • image/color — descreve cores e modelos de cor (Color, RGBA, NRGBA, Gray).
  • image/draw — fornece algoritmos de desenho e composição de imagens (composição Porter-Duff).
  • image/png, image/jpeg, image/gif — codecs para leitura/gravação dos respectivos formatos.


Exemplo 1: Criar e salvar PNG com gradiente



package main

import ( "image" "image/color" "image/png" "os")

func main() { // Criamos uma nova imagem RGBA 200x200 width, height := 200, 200 img := image.NewRGBA(image.Rect(0, 0, width, height))

// Preenchemos os pixels com gradiente do vermelho ao azul for y := 0; y < height; y++ { for x := 0; x < width; x++ { // Coeficiente de 0 a 1 ratio := float64(x) / float64(width) r := uint8(255 * (1 - ratio)) b := uint8(255 * ratio) g := uint8(128) img.Set(x, y, color.RGBA{r, g, b, 255}) } }

// Salvamos em arquivo f, _ := os.Create("gradient.png") defer f.Close() png.Encode(f, img)}


Exemplo 2: Carregar JPEG, sobrepor texto (via image/draw)



package main

import ( "image" "image/color" "image/draw" "image/jpeg" "image/png" "os")

func main() { // Abrimos a imagem original srcFile, _ := os.Open("input.jpg") defer srcFile.Close() src, _, _ := image.Decode(srcFile)

// Criamos uma cópia em RGBA para permitir desenho bounds := src.Bounds() dst := image.NewRGBA(bounds) draw.Draw(dst, bounds, src, bounds.Min, draw.Src)

// Desenhamos um retângulo vermelho no canto superior esquerdo redRect := image.NewUniform(color.RGBA{255, 0, 0, 200}) rect := image.Rect(10, 10, 150, 80) draw.Draw(dst, rect, redRect, image.Point{}, draw.Over)

// Salvamos o resultado outFile, _ := os.Create("output.png") defer outFile.Close() png.Encode(outFile, dst)}


Biblioteca imaging: processamento de alto nível



imaging (github.com/disintegration/imaging) é uma biblioteca popular que oferece uma API conveniente para as operações mais comuns: redimensionar, cortar, girar, aplicar filtros e converter.



  • imaging.Open() — carregar imagem de arquivo.
  • imaging.Resize() — redimensionar mantendo a proporção.
  • imaging.Fit() — ajustar a um retângulo especificado.
  • imaging.Fill() — cortar e redimensionar para um tamanho exato.
  • imaging.Rotate() — girar em um ângulo especificado.
  • imaging.Blur(), imaging.Sharpen() — filtros.


Exemplo 3: Redimensionar usando

Recommendations