Travailler avec les images en C# (.NET) : des bases aux techniques avancées
Le traitement d'images est l'une des tâches clés du développement moderne. Dans l'écosystème C# (.NET), il existe plusieurs bibliothèques puissantes pour travailler avec les graphismes, allant de la bibliothèque intégrée System.Drawing aux solutions multiplateformes modernes comme ImageSharp et SkiaSharp. Dans cet article, nous allons détailler les approches principales, fournir des exemples de code et donner des conseils pratiques.
1. Aperçu des bibliothèques pour le traitement d'images dans .NET
Le choix de la bibliothèque dépend de vos tâches et de votre plateforme. Voici trois options principales :
- System.Drawing.Common — la bibliothèque classique de Microsoft, disponible dans .NET 6+. Fonctionne via GDI+ sur Windows, mais a des limitations sur Linux/macOS.
- SixLabors.ImageSharp — une bibliothèque entièrement gérée et multiplateforme. Prend en charge les formats JPEG, PNG, BMP, GIF, WebP. Idéale pour les applications web et le traitement côté serveur.
- SkiaSharp — un wrapper autour du moteur Skia (utilisé dans Chrome, Flutter). Offre des performances élevées et de vastes possibilités pour les graphismes 2D, y compris le travail avec les images, le texte et les graphismes vectoriels.
Pour la plupart des projets modernes, ImageSharp est recommandé — il est simple d'utilisation, activement développé et indépendant de la plateforme.
2. Installation et connexion des bibliothèques
Installation via NuGet Package Manager (ou .NET CLI) :
// Pour ImageSharpdotnet add package SixLabors.ImageSharp
// Pour SkiaSharpdotnet add package SkiaSharp
// Pour System.Drawing (si nécessaire)dotnet add package System.Drawing.Common3. Opérations de base avec les images avec ImageSharp
Examinons les opérations principales : chargement, redimensionnement, recadrage, application de filtres et enregistrement.
3.1 Chargement et affichage des informations
using SixLabors.ImageSharp;using SixLabors.ImageSharp.PixelFormats;
using (Image<Rgba32> image = Image.Load<Rgba32>("input.jpg")){ Console.WriteLine($"Largeur : {image.Width}, Hauteur : {image.Height}"); Console.WriteLine($"Format des pixels : {image.PixelType}");}3.2 Redimensionnement avec conservation des proportions
using SixLabors.ImageSharp.Processing;
using (Image<Rgba32> image = Image.Load<Rgba32>("input.jpg")){ int newWidth = 800; int newHeight = (int)((float)image.Height / image.Width * newWidth);
image.Mutate(x => x.Resize(newWidth, newHeight)); image.Save("output_resized.jpg");}3.3 Recadrage (crop) de la partie centrale
using (Image<Rgba32> image = Image.Load<Rgba32>("input.jpg")){ int cropSize = Math.Min(image.Width, image.Height); var rect = new Rectangle( (image.Width - cropSize) / 2, (image.Height - cropSize) / 2, cropSize, cropSize );
image.Mutate(x => x.Crop(rect)); image.Save("output_cropped.jpg");}3.4 Application de filtres (noir et blanc, flou)
using SixLabors.ImageSharp.Processing;using SixLabors.ImageSharp.Processing.Processors.Transforms;
using (Image<Rgba32> image = Image.Load<Rgba32>("input.jpg")){ // Filtre noir et blanc image.Mutate(x => x.Grayscale());
// Flou gaussien (rayon 5) image.Mutate(x => x.GaussianBlur(5));
image.Save("output_filtered.jpg");}4. Travail avec les formats et la qualité
ImageSharp permet de définir des paramètres d'enregistrement pour chaque format :
using SixLabors.ImageSharp.Formats.Jpeg;
using (Image<Rgba32> image = Image.Load<Rgba32>("input.jpg")){ var encoder = new J Aussi dans la bibliothèque
Cryptographie dans Node.js : chiffrement et hachage avec crypto
Client HTTP pour C++ : top bibliothèques pour travailler avec le réseau
Bibliothèque GraphQL en C++ : implémentation d'API avec graphql-cpp
Validation des données en JavaScript (Node.js) avec Joi et Yup