Traitement d'images en Go : redimensionnement et recadrage (resize, crop)

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 : redimensionnement (resize) et recadrage (crop)

\n\n

Dans le développement web moderne et la création de services backend, il est souvent nécessaire de traiter des fichiers graphiques : réduire le poids, uniformiser le format, créer des miniatures. Le langage Go (Golang) propose plusieurs bibliothèques puissantes et performantes pour le traitement d'images. Dans cet article, nous examinerons en détail deux opérations clés — le redimensionnement (resize) et le recadrage (crop) — en utilisant des outils populaires.

\n\n

Pourquoi Go pour le traitement d'images ?

\n

Go se compile en code natif, offre des performances élevées et une prise en charge intégrée du multithreading. Cela en fait un excellent choix pour créer des services de traitement d'images à forte charge. Contrairement à Python, où l'on utilise souvent Pillow (extensions C), Go fournit des implémentations pures en Go qui s'intègrent facilement dans une architecture de microservices.

\n\n

Bibliothèques principales

\n
    \n
  • github.com/disintegration/imaging — la bibliothèque la plus populaire. Elle offre une API pratique pour resize, crop, rotate, blur et d'autres opérations. Elle fonctionne au-dessus du package standard image.
  • \n
  • github.com/nfnt/resize — l'une des premières bibliothèques. Elle se distingue par sa grande vitesse et la prise en charge de différents algorithmes d'interpolation (NearestNeighbor, Bilinear, Lanczos2, Lanczos3).
  • \n
  • github.com/anthonynsimon/bild — un projet plus récent axé sur la performance et la propreté du code. Il prend en charge resize, crop et les effets.
  • \n
\n\n

Dans cet article, nous nous concentrerons sur la bibliothèque imaging comme étant la plus équilibrée en termes de fonctionnalités et de simplicité d'utilisation.

\n\n

Installation

\n

Pour commencer, il est nécessaire d'installer la bibliothèque à l'aide de go get :

\n
go get github.com/disintegration/imaging
\n\n

Redimensionnement d'image (Resize)

\n

L'opération resize permet de redimensionner l'image à de nouvelles dimensions. La bibliothèque imaging prend en charge plusieurs modes :

\n
    \n
  • Fit — adapte l'image à un rectangle donné tout en conservant les proportions.
  • \n
  • Fill — remplit le rectangle en recadrant les bords si nécessaire.
  • \n
  • Resize — redimensionnement exact à la largeur et à la hauteur spécifiées (sans conservation des proportions).
  • \n
\n\n

Exemple de redimensionnement de base avec conservation des proportions (Fit) :

\n
package main\n\nimport (\n    "github.com/disintegration/imaging"\n    "log"\n)\n\nfunc main() {\n    // Ouvrir l'image source\n    src, err := imaging.Open("input.jpg")\n    if err != nil {\n        log.Fatalf("Erreur d'ouverture : %v", err)\n    }\n\n    // Redimensionner à une largeur de 800px, la hauteur est calculée automatiquement\n    dst := imaging.Fit(src, 800, 600, imaging.Lanczos)\n\n    // Enregistrer le résultat\n    err = imaging.Save(dst, "output_fit.jpg")\n    if err != nil {\n        log.Fatalf("Erreur d'enregistrement : %v", err)\n    }\n    log.Println("Image traitée avec succès !") \n}
\n\n

Si vous avez besoin d'un redimensionnement exact (par exemple, pour créer une prévisualisation 150x150) :

\n
// Redimensionnement exact (peut déformer les proportions)\ndst := imaging.Resize(src, 150, 150, imaging.Lanczos)
\n\n

Recadrage d'image (Crop)

\n

Le recadrage permet de supprimer une partie de l'image. Dans imaging, il existe deux méthodes principales :

\n
    \n
  • Crop — découpe une zone rectangulaire selon des coordonnées données.
  • \n
  • CropCenter — découpe la zone centrale d'une taille donnée.
  • \n
\n\n

Exemple de recadrage de la partie centrale (utile pour créer des avatars carrés) :

\n
package main\n\nimport (\n    "github.com/disintegration/imaging"\n    "log"\n)\n\nfunc main() {\n    src, err :                    

Recommendations