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
Imageet 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
Aussi dans la bibliothèque
WebSocket dans Node.js : la bibliothèque ws pour le temps réel
Travailler avec S3 et les stockages cloud en TypeScript : guide complet
Travailler avec Kafka en Rust : les bibliothèques rdkafka et Franz
SFML pour C++ : guide complet avec exemples
gRPC pour C++ : bibliothèques, exemples et guide d'utilisation