Travailler avec des images en C# : redimensionnement et recadrage (resize, crop)
\n\nDans le développement web moderne et les applications de bureau, il est souvent nécessaire de traiter des images par programmation : les réduire pour accélérer le chargement, créer des miniatures ou recadrer les bords superflus. Dans l'écosystème .NET, il existe plusieurs approches pour résoudre ces tâches. Dans cet article, nous examinerons deux méthodes principales pour redimensionner (resize) et recadrer (crop) des images en C# : la classique System.Drawing et la moderne multiplateforme SixLabors.ImageSharp.
1. Utilisation de System.Drawing (Windows Forms / .NET Framework)
\nMéthode classique, disponible dans .NET Framework et .NET Core/5+ (avec des limitations sur Linux/macOS). Fonctionne via l'espace de noms System.Drawing et la classe Bitmap. Convient aux anciens projets ou aux applications Windows uniquement.
Exemple : redimensionnement avec conservation des proportions
\nusing System.Drawing;\nusing System.Drawing.Drawing2D;\nusing System.Drawing.Imaging;\n\npublic static Bitmap ResizeImage(Image image, int newWidth, int newHeight)\n{\n var destRect = new Rectangle(0, 0, newWidth, newHeight);\n var destImage = new Bitmap(newWidth, newHeight);\n\n using (var graphics = Graphics.FromImage(destImage))\n {\n graphics.CompositingMode = CompositingMode.SourceCopy;\n graphics.CompositingQuality = CompositingQuality.HighQuality;\n graphics.InterpolationMode = InterpolationMode.HighQualityBicubic;\n graphics.SmoothingMode = SmoothingMode.HighQuality;\n graphics.PixelOffsetMode = PixelOffsetMode.HighQuality;\n\n using (var wrapMode = new ImageAttributes())\n {\n wrapMode.SetWrapMode(WrapMode.TileFlipXY);\n graphics.DrawImage(image, destRect, 0, 0, image.Width, image.Height, GraphicsUnit.Pixel, wrapMode);\n }\n }\n return destImage;\n}\n\n// Utilisation :\nusing (var original = Image.FromFile("input.jpg"))\n{\n using (var resized = ResizeImage(original, 800, 600))\n {\n resized.Save("output.jpg", ImageFormat.Jpeg);\n }\n}\n\nExemple : recadrage (crop) d'une image
\npublic static Bitmap CropImage(Image source, Rectangle cropArea)\n{\n var bmp = new Bitmap(cropArea.Width, cropArea.Height);\n using (var g = Graphics.FromImage(bmp))\n {\n g.DrawImage(source, new Rectangle(0, 0, bmp.Width, bmp.Height),\n cropArea, GraphicsUnit.Pixel);\n }\n return bmp;\n}\n\n// Utilisation :\nvar cropRect = new Rectangle(100, 50, 300, 200); // X, Y, Width, Height\nusing (var cropped = CropImage(Image.FromFile("input.jpg"), cropRect))\n{\n cropped.Save("cropped.jpg", ImageFormat.Jpeg);\n}\n\n2. SixLabors ImageSharp (multiplateforme .NET)
\nSixLabors.ImageSharp est une bibliothèque moderne, entièrement gérée, pour le traitement d'images, fonctionnant sur .NET Core, .NET 5/6/7+ et .NET Framework. Elle ne dépend pas de l'API Windows, ce qui la rend idéale pour les applications web (ASP.NET Core), les utilitaires console et les conteneurs Docker.
\n\nInstallation via NuGet :
\ndotnet add package SixLabors.ImageSharp\n\nExemple : redimensionnement avec conservation des proportions
\nusing SixLabors.ImageSharp;\nusing SixLabors.ImageSharp.Processing;\n\npublic static void ResizeImageSharp(string inputPath, string outputPath, int width, int height)\n{\n using (var image = Image.Load(inputPath))\n {\n // Mode ResizeMode.Pad — adapte l'image en ajoutant des marges transparentes/blanches\n // ResizeMode.Crop — recadre aux dimensions spécifiées\n // ResizeMode.Max — conserve les proportions en s'adaptant au rectangle\n image.Mutate(x => x.Resize(width, height, KnownResamplers.Lanczos3));\n image.Save(outputPath);\n }\n}\n\n// Exemple avec conservation des proportions (auto Aussi dans la bibliothèque
CreateML Swift : guide complet avec exemples pratiques
Symfony/Mailer PHP : guide complet avec exemples
Traitement d'images en Go : redimensionnement et recadrage avec la bibliothèque imaging
ts-mockito TypeScript : guide complet avec exemples pratiques
Client OAuth pour Node.js : implémentation de l'authentification via Google et GitHub