Traitement d'images en C# : 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 des images en C# : redimensionnement et recadrage (resize, crop)

\n\n

Dans 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.

\n\n

1. Utilisation de System.Drawing (Windows Forms / .NET Framework)

\n

Mé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.

\n\n

Exemple : redimensionnement avec conservation des proportions

\n
using 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\n

Exemple : recadrage (crop) d'une image

\n
public 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\n

2. SixLabors ImageSharp (multiplateforme .NET)

\n

SixLabors.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\n

Installation via NuGet :

\n
dotnet add package SixLabors.ImageSharp
\n\n

Exemple : redimensionnement avec conservation des proportions

\n
using 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                    

Recommendations