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/imagingDespué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
Java para geolocalización y mapas: bibliotecas, API y ejemplos Trabajo con fechas en TypeScript: revisión de las bibliotecas date-fns, Luxon y Day.js GraphQL Java — biblioteca del lado del servidor para implementar API GraphQL en Java Trabajo con Apache Kafka en Swift (iOS/macOS): bibliotecas y ejemplosTambién en la biblioteca
Biblioteca WebSocket Swift: Starscream para iOS/macOS
Criptografía en Node.js: cifrado y hash con crypto
Trabajo con Markdown en TypeScript: bibliotecas, analizadores y herramientas
ring para Rust: guía completa con ejemplos prácticos
Cliente HTTP para Go (Golang): mejores bibliotecas para trabajar con HTTP
Recommendations