Trabajo con imágenes en Go (Golang): bibliotecas y ejemplos

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

Trabajo con imágenes en Go (Golang): visión general de bibliotecas y ejemplos prácticos



Go (Golang) es un lenguaje compilado, de tipado estático, que está ganando popularidad en el desarrollo web, microservicios y tareas relacionadas con el procesamiento de datos. A diferencia de Python, donde tradicionalmente se usa OpenCV o Pillow para trabajar con imágenes, en Go existen varias bibliotecas ligeras y rápidas que permiten realizar operaciones básicas con gráficos rasterizados: cambio de tamaño, recorte, rotación, aplicación de filtros y dibujo.



En este artículo, analizaremos las tres bibliotecas más populares para trabajar con imágenes en Go: imaging, nfnt/resize y gg. Aprenderá cómo instalarlas y verá ejemplos de código para tareas típicas.



1. Biblioteca imaging



imaging es una biblioteca simple pero potente para el procesamiento de imágenes. Proporciona funciones convenientes para cambiar el tamaño, recortar, rotar, aplicar filtros (desenfoque, nitidez, inversión de colores) y guardar en varios formatos (JPEG, PNG, GIF, BMP).



Instalación

go get -u github.com/disintegration/imaging


Ejemplo: cambio de tamaño y recorte

package main

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

func main() { // Abrimos la imagen src, err := imaging.Open("input.jpg") if err != nil { log.Fatalf("Error al abrir el archivo: %v", err) }

// Cambiamos el tamaño a 800x600, manteniendo la proporción dst := imaging.Resize(src, 800, 600, imaging.Lanczos) // Recortamos el área central de 400x400 dst = imaging.CropCenter(dst, 400, 400)

// Aplicamos un filtro de desenfoque dst = imaging.Blur(dst, 3.0)

// Guardamos el resultado err = imaging.Save(dst, "output.jpg") if err != nil { log.Fatalf("Error al guardar: %v", err) } fmt.Println("Imagen procesada y guardada como output.jpg")}


La biblioteca admite múltiples filtros: imaging.Grayscale, imaging.Invert, imaging.Contrast, imaging.Sharpen y otros. Todos funcionan "de fábrica".



2. Biblioteca nfnt/resize



Si su tarea es solo cambiar el tamaño de las imágenes con el máximo rendimiento, nfnt/resize es la mejor opción. Está optimizada para el procesamiento de alta velocidad y admite varios algoritmos de interpolación (NearestNeighbor, Bilinear, Bicubic, Lanczos2, Lanczos3).



Instalación

go get -u github.com/nfnt/resize


Ejemplo: cambio de tamaño con 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) }

// Cambiamos el tamaño a un ancho de 300 píxeles, la altura se calcula automáticamente m := resize.Resize(300, 0, img, resize.Lanczos3)

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

// Guardamos con calidad JPEG al 90% err = jpeg.Encode(out, m, &jpeg.Options{Quality: 90}) if err != nil { log.Fatal(err) } log.Println("Imagen reducida a un ancho de 300px")}


Esta biblioteca no proporciona funciones para recortar o aplicar filtros, pero su velocidad y minimalismo la hacen ideal para servidores que necesitan procesar miles de imágenes por segundo.



3. Biblioteca gg (dibujo)



gg es una biblioteca para dibujar gráficos 2D, similar a cairo o Pillow Draw. Permite crear imágenes

Recommendations