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

Introduction au travail avec les images en Go



Go (Golang) est un langage compilé moderne doté d'une riche bibliothèque standard qui inclut le package image pour le travail de base avec les images matricielles. Cependant, pour les tâches de redimensionnement, de filtrage, de conversion de formats et de traitement par lots, des bibliothèques tierces sont souvent nécessaires. Dans cet article, nous examinerons les outils les plus populaires pour travailler avec les images en Go, fournirons des exemples de code et comparerons leurs fonctionnalités.



Le package standard image



Le package image de la bibliothèque standard Go fournit des types et fonctions de base pour le décodage, l'encodage et la manipulation d'images. Il prend en charge les formats PNG, JPEG et GIF (décodage uniquement). Exemple de chargement d'une image à partir d'un fichier :



package main

import ( "image" "image/jpeg" "os")

func main() { file, err := os.Open("input.jpg") if err != nil { panic(err) } defer file.Close()

img, _, err := image.Decode(file) if err != nil { panic(err) }

// Accès aux pixels via img.At(x, y) _ = img}


Limitations du package standard : absence de fonctions intégrées pour le redimensionnement, la rotation, le filtrage et le travail avec les données EXIF. Pour ces tâches, utilisez des bibliothèques tierces.



La bibliothèque imaging



imaging est l'une des bibliothèques les plus populaires pour le traitement d'images en Go. Elle fournit une API simple pour le redimensionnement, le recadrage, la rotation, l'application de filtres et la conversion de formats.



Installation :

go get github.com/disintegration/imaging


Exemple de redimensionnement avec conservation des proportions :



package main

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

func main() { src, err := imaging.Open("input.jpg") if err != nil { log.Fatalf("Erreur d'ouverture : %v", err) }

// Redimensionnement à une largeur de 800px, la hauteur s'ajuste dst := imaging.Resize(src, 800, 0, imaging.Lanczos)

err = imaging.Save(dst, "output.jpg") if err != nil { log.Fatalf("Erreur de sauvegarde : %v", err) }}


La bibliothèque prend en charge les filtres : flou, netteté, contraste, luminosité, niveaux de gris. Exemple d'application d'un filtre :



grayscaleImg := imaging.Grayscale(src)sharpImg := imaging.Sharpen(src, 0.5)blurImg := imaging.Blur(src, 3.0)


Avantages : API propre, prise en charge du GIF (lecture uniquement), orientation automatique selon EXIF, fonctions intégrées pour les miniatures et le traitement par lots.



La bibliothèque nfnt/resize



nfnt/resize est une bibliothèque spécialisée pour le redimensionnement d'images. Elle propose plusieurs algorithmes d'interpolation (NearestNeighbor, Bilinear, Bicubic, MitchellNetravali, Lanczos2, Lanczos3).



Installation :

go get github.com/nfnt/resize


Exemple de redimensionnement à exactement 200x200 pixels :



package main

import ( "image/jpeg" "os" "github.com/nfnt/resize")

func main() { file, _ := os.Open("input.jpg") defer file.Close() img, _ := jpeg.Decode(file)

// Redimensionnement à 200x200 newImg := resize.Resize(200, 200, img, resize.Lanczos3)

out, _ := os.Create("resized.jpg") defer out.Close() jpeg.Encode(out, newImg, nil)}


Particularités : la bibliothèque ne fonctionne qu'avec les images implémentant l'interface image.Image. Elle ne prend pas en charge la lecture/écriture directe de fichiers — un décodage/encodage manuel est nécessaire.

Recommendations