Travailler avec les images en Go (Golang) : image, draw, imaging, resize

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) : des bases aux outils avancés



Go (Golang) fournit des outils intégrés puissants pour travailler avec les graphiques raster, ainsi qu'un riche écosystème de bibliothèques tierces. Dans cet article, nous examinerons à la fois les packages standards image, image/color, image/draw et image/png, et les bibliothèques populaires imaging, resize et gg pour résoudre des tâches typiques : chargement, redimensionnement, superposition, dessin et enregistrement d'images.



Packages standards Go pour travailler avec les images



Dans la bibliothèque standard de Go, les types et fonctions de base pour travailler avec les images sont intégrés, couvrant 80 % des tâches quotidiennes.



  • image — définit l'interface Image et les types concrets : RGBA, NRGBA, Gray, Paletted, etc.
  • image/color — décrit les couleurs et les modèles de couleurs (Color, RGBA, NRGBA, Gray).
  • image/draw — fournit des algorithmes de dessin et de superposition d'images (compositing Porter-Duff).
  • image/png, image/jpeg, image/gif — codecs pour la lecture/écriture des formats correspondants.


Exemple 1 : Création et enregistrement d'un PNG avec un dégradé



package main

import ( "image" "image/color" "image/png" "os")

func main() { // Créer une nouvelle image RGBA 200x200 width, height := 200, 200 img := image.NewRGBA(image.Rect(0, 0, width, height))

// Remplir les pixels avec un dégradé du rouge au bleu for y := 0; y < height; y++ { for x := 0; x < width; x++ { // Coefficient de 0 à 1 ratio := float64(x) / float64(width) r := uint8(255 * (1 - ratio)) b := uint8(255 * ratio) g := uint8(128) img.Set(x, y, color.RGBA{r, g, b, 255}) } }

// Enregistrer dans un fichier f, _ := os.Create("gradient.png") defer f.Close() png.Encode(f, img)}


Exemple 2 : Chargement d'un JPEG, superposition de texte (via image/draw)



package main

import ( "image" "image/color" "image/draw" "image/jpeg" "image/png" "os")

func main() { // Ouvrir l'image source srcFile, _ := os.Open("input.jpg") defer srcFile.Close() src, _, _ := image.Decode(srcFile)

// Créer une copie en RGBA pour pouvoir dessiner bounds := src.Bounds() dst := image.NewRGBA(bounds) draw.Draw(dst, bounds, src, bounds.Min, draw.Src)

// Dessiner un rectangle rouge dans le coin supérieur gauche redRect := image.NewUniform(color.RGBA{255, 0, 0, 200}) rect := image.Rect(10, 10, 150, 80) draw.Draw(dst, rect, redRect, image.Point{}, draw.Over)

// Enregistrer le résultat outFile, _ := os.Create("output.png") defer outFile.Close() png.Encode(outFile, dst)}


Bibliothèque imaging : traitement haut niveau



imaging (github.com/disintegration/imaging) est une bibliothèque populaire qui fournit une API pratique pour les opérations les plus courantes : redimensionnement, recadrage, rotation, application de filtres et conversion.



  • imaging.Open() — chargement d'une image depuis un fichier.
  • imaging.Resize() — redimensionnement tout en conservant les proportions.
  • imaging.Fit() — ajuster à un rectangle donné.
  • imaging.Fill() — recadrer et redimensionner à une taille exacte.
  • imaging.Rotate() — rotation d'un angle donné.
  • imaging.Blur(), imaging.Sharpen() — filtres.


Exemple 3 : Redimensionnement avec

Recommendations