Trabalho com imagens em Go (Golang): bibliotecas e exemplos

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

Introdução ao trabalho com imagens em Go



Go (Golang) é uma linguagem compilada moderna com uma rica biblioteca padrão, que inclui o pacote image para trabalho básico com imagens raster. No entanto, para tarefas de redimensionamento, filtragem, conversão de formatos e processamento em lote, bibliotecas de terceiros são frequentemente necessárias. Neste artigo, exploraremos as ferramentas mais populares para trabalhar com imagens em Go, forneceremos exemplos de código e compararemos suas funcionalidades.



Pacote padrão image



O pacote image da biblioteca padrão do Go fornece tipos e funções básicas para decodificar, codificar e manipular imagens. Ele suporta os formatos PNG, JPEG e GIF (apenas decodificação). Exemplo de carregamento de imagem de um arquivo:



package main

import ( "image" "image/jpeg" "os")

func main() { file, err := os.Open("input.jpg") if err != nil { panic(err) } defer file.Close()

img, _, err := image.Decode(file) if err != nil { panic(err) }

// Acesso aos pixels via img.At(x, y) _ = img}


Limitações do pacote padrão: ausência de funções embutidas para redimensionamento, rotação, filtragem e trabalho com dados EXIF. Para essas tarefas, utilize bibliotecas de terceiros.



Biblioteca imaging



imaging é uma das bibliotecas mais populares para processamento de imagens em Go. Ela oferece uma API simples para redimensionamento, corte, rotação, aplicação de filtros e conversão de formatos.



Instalação:

go get github.com/disintegration/imaging


Exemplo de redimensionamento mantendo a proporção:



package main

import ( "github.com/disintegration/imaging" "log")

func main() { src, err := imaging.Open("input.jpg") if err != nil { log.Fatalf("Erro ao abrir: %v", err) }

// Redimensionar para largura de 800px, altura ajustada automaticamente dst := imaging.Resize(src, 800, 0, imaging.Lanczos)

err = imaging.Save(dst, "output.jpg") if err != nil { log.Fatalf("Erro ao salvar: %v", err) }}


A biblioteca suporta filtros: desfoque, nitidez, contraste, brilho, tons de cinza. Exemplo de aplicação de filtro:



grayscaleImg := imaging.Grayscale(src)sharpImg := imaging.Sharpen(src, 0.5)blurImg := imaging.Blur(src, 3.0)


Vantagens: API limpa, suporte a GIF (somente leitura), orientação automática por EXIF, funções embutidas para miniaturas e processamento em lote.



Biblioteca nfnt/resize



nfnt/resize é uma biblioteca especializada em redimensionamento de imagens. Ela oferece vários algoritmos de interpolação (NearestNeighbor, Bilinear, Bicubic, MitchellNetravali, Lanczos2, Lanczos3).



Instalação:

go get github.com/nfnt/resize


Exemplo de redimensionamento para exatos 200x200 pixels:



package main

import ( "image/jpeg" "os" "github.com/nfnt/resize")

func main() { file, _ := os.Open("input.jpg") defer file.Close() img, _ := jpeg.Decode(file)

// Redimensionar para 200x200 newImg := resize.Resize(200, 200, img, resize.Lanczos3)

out, _ := os.Create("resized.jpg") defer out.Close() jpeg.Encode(out, newImg, nil)}


Características: a biblioteca funciona apenas com imagens que implementam a interface image.Image. Não suporta leitura/gravação direta de arquivos — é necessário decodificar/codificar manualmente.

Recommendations