Travailler avec les images en Go : redimensionnement (resize) et recadrage (crop)
\n\nDans 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\nPourquoi Go pour le traitement d'images ?
\nGo 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\nBibliothè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 standardimage. \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
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.
Installation
\nPour commencer, il est nécessaire d'installer la bibliothèque à l'aide de go get :
go get github.com/disintegration/imaging\n\nRedimensionnement d'image (Resize)
\nL'opération resize permet de redimensionner l'image à de nouvelles dimensions. La bibliothèque imaging prend en charge plusieurs modes :
- \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
Exemple de redimensionnement de base avec conservation des proportions (Fit) :
\npackage 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\nSi 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\nRecadrage d'image (Crop)
\nLe recadrage permet de supprimer une partie de l'image. Dans imaging, il existe deux méthodes principales :
- \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
Exemple de recadrage de la partie centrale (utile pour créer des avatars carrés) :
\npackage main\n\nimport (\n "github.com/disintegration/imaging"\n "log"\n)\n\nfunc main() {\n src, err : Aussi dans la bibliothèque
TypeBox pour TypeScript : guide complet avec exemples
Métriques Prometheus dans Node.js : la bibliothèque prom-client pour le monitoring
Travailler avec Excel en JavaScript (Node.js) : bibliothèques et exemples de code
SwiftyJSON Swift : guide complet avec exemples pratiques