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

Trabalho com imagens em Go (Golang): visão geral das bibliotecas e exemplos práticos



Go (Golang) é uma linguagem compilada, estaticamente tipada, que está ganhando popularidade no desenvolvimento web, microsserviços e tarefas relacionadas ao processamento de dados. Ao contrário do Python, onde tradicionalmente se usa OpenCV ou Pillow para trabalhar com imagens, Go possui várias bibliotecas leves e rápidas que permitem realizar operações básicas com gráficos raster: redimensionamento, corte, rotação, aplicação de filtros e desenho.



Neste artigo, veremos três das bibliotecas mais populares para trabalhar com imagens em Go: imaging, nfnt/resize e gg. Você aprenderá como instalá-las e verá exemplos de código para tarefas típicas.



1. Biblioteca imaging



imaging é uma biblioteca simples, mas poderosa, para processamento de imagens. Ela fornece funções convenientes para redimensionamento, corte, rotação, aplicação de filtros (desfoque, nitidez, inversão de cores) e salvamento em vários formatos (JPEG, PNG, GIF, BMP).



Instalação

go get -u github.com/disintegration/imaging


Exemplo: redimensionamento e corte

package main

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

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

// Redimensionar para 800x600, mantendo a proporção dst := imaging.Resize(src, 800, 600, imaging.Lanczos) // Cortar a região central de 400x400 dst = imaging.CropCenter(dst, 400, 400)

// Aplicar filtro de desfoque dst = imaging.Blur(dst, 3.0)

// Salvar o resultado err = imaging.Save(dst, "output.jpg") if err != nil { log.Fatalf("Erro ao salvar: %v", err) } fmt.Println("Imagem processada e salva como output.jpg")}


A biblioteca suporta vários filtros: imaging.Grayscale, imaging.Invert, imaging.Contrast, imaging.Sharpen e outros. Todos funcionam "prontos para uso".



2. Biblioteca nfnt/resize



Se sua tarefa é apenas redimensionar imagens com máxima performance, nfnt/resize é a melhor escolha. Ela é otimizada para processamento de alta velocidade e suporta vários algoritmos de interpolação (NearestNeighbor, Bilinear, Bicubic, Lanczos2, Lanczos3).



Instalação

go get -u github.com/nfnt/resize


Exemplo: redimensionamento com diferentes algoritmos

package main

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

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

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

// Redimensionar para largura de 300 pixels, altura calculada automaticamente m := resize.Resize(300, 0, img, resize.Lanczos3)

out, err := os.Create("resized.jpg") if err != nil { log.Fatal(err) } defer out.Close()

// Salvar com qualidade JPEG 90% err = jpeg.Encode(out, m, &jpeg.Options{Quality: 90}) if err != nil { log.Fatal(err) } log.Println("Imagem reduzida para largura de 300px")}


Esta biblioteca não fornece funções para corte ou filtros, mas sua velocidade e minimalismo a tornam ideal para servidores que precisam processar milhares de imagens por segundo.



3. Biblioteca gg (drawing)



gg é uma biblioteca para desenho de gráficos 2D, semelhante ao cairo ou Pillow Draw. Ela permite criar imagens

Recommendations