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/imagingExemple 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/resizeExemple 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.
Aussi dans la bibliothèque
Travailler avec CSV en Rust : bibliothèque csv et exemples pratiques
Envoi de SMS en PHP : API des bibliothèques sms.ru et autres services
Laravel Telescope pour PHP : guide complet avec exemples
Surveillance des applications Rust : bibliothèques et outils pour le suivi des performances