Travailler avec les images en Go (Golang) : bibliothèques et exemples

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

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/imaging


Exemple : 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/resize


Exemple : 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

Recommendations