Trabajo con imágenes en Go: redimensionar y recortar con la librería imaging

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

Librería imaging para Go: redimensionar y recortar imágenes



En el desarrollo web moderno, el procesamiento de imágenes es una de las tareas clave: desde la creación de vistas previas hasta la adaptación de imágenes para diferentes resoluciones de pantalla. Si programa en Go (Golang) y busca una herramienta simple pero potente para trabajar con imágenes, preste atención a la librería imaging. Proporciona una API conveniente para cambiar el tamaño (resize), recortar (crop), rotar, filtrar y muchas otras operaciones.



¿Qué es imaging?



imaging es una librería popular para Go, construida sobre la base del paquete image de la librería estándar, pero con una interfaz mucho más conveniente. Soporta los formatos JPEG, PNG, GIF y BMP, y permite realizar operaciones con una cantidad mínima de código. La principal ventaja es la velocidad de trabajo y la facilidad de integración.



Instalación



Para instalar la librería, ejecute en la terminal:



go get -u github.com/disintegration/imaging


Después de esto, podrá importarla en su proyecto:



import "github.com/disintegration/imaging"


Operaciones principales: resize y crop



1. Cambio de tamaño (resize)



La función imaging.Resize permite cambiar el tamaño de la imagen a un ancho y alto especificados. Si necesita mantener las proporciones, pase 0 para uno de los lados: la librería calculará automáticamente el otro.



Ejemplo: redimensionar a 300 píxeles de ancho



package main

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

func main() { // Abrimos la imagen img, err := imaging.Open("input.jpg") if err != nil { panic(err) }

// Cambiamos el ancho a 300px, la altura se ajusta automáticamente resized := imaging.Resize(img, 300, 0, imaging.Lanczos)

// Guardamos el resultado err = imaging.Save(resized, "output_resized.jpg") if err != nil { panic(err) }}


En el ejemplo se utiliza el filtro imaging.Lanczos, uno de los de mayor calidad para redimensionar. Puede elegir otros: NearestNeighbor, Box, Linear, Gaussian, etc.



2. Recorte (crop)



La función imaging.Crop recorta un área rectangular de la imagen. Debe recibir las coordenadas de la esquina superior izquierda, el ancho y el alto del área.



Ejemplo: recorte de la parte central de 200x200 píxeles



package main

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

func main() { img, err := imaging.Open("input.jpg") if err != nil { panic(err) }

// Calculamos las coordenadas para el recorte central width := img.Bounds().Dx() height := img.Bounds().Dy() x := (width - 200) / 2 y := (height - 200) / 2

// Recortamos cropped := imaging.Crop(img, imaging.Rect(x, y, x+200, y+200))

err = imaging.Save(cropped, "output_cropped.jpg") if err != nil { panic(err) }}


Si solo necesita recortar a un cuadrado centrado, use imaging.CropCenter:



croppedCenter := imaging.CropCenter(img, 200, 200)


Funcionalidades avanzadas



Además de las operaciones básicas, imaging ofrece:



  • Thumbnail — creación de miniaturas manteniendo las proporciones y rellenando el fondo.
  • Rotate — rotación en un ángulo arbitrario.
  • Flip — reflejo horizontal o vertical.
  • Blur — desenfoque de la imagen.
  • Sharpen — aumento de nitidez.
  • Grayscale — conversión a blanco y negro.


Ejemplo: creación de una miniatura de 150x150

Recommendations