Travailler avec les images en Go (Golang) : aperçu des bibliothèques et exemples pratiques
Go (Golang) est un langage compilé, typé statiquement, qui gagne en popularité dans le développement web, les microservices et les tâches liées au traitement de données. Contrairement à Python, où OpenCV ou Pillow sont traditionnellement utilisés pour travailler avec les images, Go propose plusieurs bibliothèques légères et rapides qui permettent d'effectuer les opérations de base sur les graphiques raster : redimensionnement, recadrage, rotation, application de filtres et dessin.
Dans cet article, nous examinerons les trois bibliothèques les plus populaires pour travailler avec les images en Go : imaging, nfnt/resize et gg. Vous apprendrez comment les installer et verrez des exemples de code pour des tâches typiques.
1. Bibliothèque imaging
imaging est une bibliothèque simple mais puissante pour le traitement d'images. Elle fournit des fonctions pratiques pour le redimensionnement, le recadrage, la rotation, l'application de filtres (flou, netteté, inversion des couleurs) et la sauvegarde dans différents formats (JPEG, PNG, GIF, BMP).
Installation
go get -u github.com/disintegration/imagingExemple : redimensionnement et recadrage
package main
import ( "fmt" "github.com/disintegration/imaging" "log")
func main() { // Ouvrir l'image src, err := imaging.Open("input.jpg") if err != nil { log.Fatalf("Erreur d'ouverture du fichier : %v", err) }
// Redimensionner à 800x600 en conservant les proportions dst := imaging.Resize(src, 800, 600, imaging.Lanczos) // Recadrer la zone centrale 400x400 dst = imaging.CropCenter(dst, 400, 400)
// Appliquer un filtre de flou dst = imaging.Blur(dst, 3.0)
// Sauvegarder le résultat err = imaging.Save(dst, "output.jpg") if err != nil { log.Fatalf("Erreur de sauvegarde : %v", err) } fmt.Println("Image traitée et sauvegardée sous output.jpg")}La bibliothèque prend en charge de nombreux filtres : imaging.Grayscale, imaging.Invert, imaging.Contrast, imaging.Sharpen et autres. Tous fonctionnent « prêts à l'emploi ».
2. Bibliothèque nfnt/resize
Si votre tâche consiste uniquement à redimensionner des images avec une performance maximale, nfnt/resize est le meilleur choix. Elle est optimisée pour un traitement à haute vitesse et prend en charge différents algorithmes d'interpolation (NearestNeighbor, Bilinear, Bicubic, Lanczos2, Lanczos3).
Installation
go get -u github.com/nfnt/resizeExemple : redimensionnement avec différents algorithmes
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) }
// Redimensionner à une largeur de 300 pixels, la hauteur est calculée automatiquement m := resize.Resize(300, 0, img, resize.Lanczos3)
out, err := os.Create("resized.jpg") if err != nil { log.Fatal(err) } defer out.Close()
// Sauvegarder avec une qualité JPEG de 90% err = jpeg.Encode(out, m, &jpeg.Options{Quality: 90}) if err != nil { log.Fatal(err) } log.Println("Image réduite à une largeur de 300px")}Cette bibliothèque ne fournit pas de fonctions de recadrage ou de filtres, mais sa vitesse et son minimalisme la rendent idéale pour les serveurs devant traiter des milliers d'images par seconde.
3. Bibliothèque gg (dessin)
gg est une bibliothèque pour le dessin graphique 2D, similaire à cairo ou Pillow Draw. Elle permet de créer des images