La bibliothèque imaging pour Go : redimensionnement et recadrage d'images
Dans le développement web moderne, le traitement d'images est l'une des tâches clés : de la création de vignettes à l'adaptation des images pour différentes résolutions d'écran. Si vous codez en Go (Golang) et recherchez un outil simple mais puissant pour travailler avec des images, jetez un œil à la bibliothèque imaging. Elle offre une API pratique pour le redimensionnement (resize), le recadrage (crop), la rotation, le filtrage et de nombreuses autres opérations.
Qu'est-ce que imaging ?
imaging est une bibliothèque populaire pour Go, construite sur la base du package image de la bibliothèque standard, mais avec une interface beaucoup plus conviviale. Elle prend en charge les formats JPEG, PNG, GIF et BMP, et permet d'effectuer des opérations avec un minimum de code. Son principal avantage est sa rapidité d'exécution et sa simplicité d'intégration.
Installation
Pour installer la bibliothèque, exécutez dans le terminal :
go get -u github.com/disintegration/imagingEnsuite, vous pouvez l'importer dans votre projet :
import "github.com/disintegration/imaging"Opérations principales : redimensionnement et recadrage
1. Redimensionnement (resize)
La fonction imaging.Resize permet de modifier la taille d'une image aux dimensions spécifiées (largeur et hauteur). Pour conserver les proportions, transmettez 0 pour l'un des côtés — la bibliothèque calculera automatiquement l'autre.
Exemple : redimensionnement à 300 pixels de largeur
package main
import ( "github.com/disintegration/imaging")
func main() { // Ouvrir l'image img, err := imaging.Open("input.jpg") if err != nil { panic(err) }
// Modifier la largeur à 300px, la hauteur s'ajuste automatiquement resized := imaging.Resize(img, 300, 0, imaging.Lanczos)
// Enregistrer le résultat err = imaging.Save(resized, "output_resized.jpg") if err != nil { panic(err) }}Dans cet exemple, le filtre imaging.Lanczos est utilisé — l'un des plus qualitatifs pour le redimensionnement. Vous pouvez également choisir d'autres : NearestNeighbor, Box, Linear, Gaussian, etc.
2. Recadrage (crop)
La fonction imaging.Crop découpe une zone rectangulaire de l'image. Vous devez lui transmettre les coordonnées du coin supérieur gauche, ainsi que la largeur et la hauteur de la zone.
Exemple : recadrage de la partie centrale de 200x200 pixels
package main
import ( "github.com/disintegration/imaging")
func main() { img, err := imaging.Open("input.jpg") if err != nil { panic(err) }
// Calculer les coordonnées pour un recadrage central width := img.Bounds().Dx() height := img.Bounds().Dy() x := (width - 200) / 2 y := (height - 200) / 2
// Recadrer 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 vous avez simplement besoin de recadrer en carré centré, utilisez imaging.CropCenter :
croppedCenter := imaging.CropCenter(img, 200, 200)Fonctionnalités avancées
En plus des opérations de base, imaging propose :
- Thumbnail — création de vignettes avec conservation des proportions et remplissage de l'arrière-plan.
- Rotate — rotation à un angle arbitraire.
- Flip — miroir horizontal ou vertical.
- Blur — floutage de l'image.
- Sharpen — accentuation de la netteté.
- Grayscale — conversion en noir et blanc.
Exemple : création d'une vignette 150x150