Bildverarbeitung in C#: Resize, Crop mit der Bibliothek ImageSharp

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

Arbeit mit Bildern in C# (.NET): Größenänderung und Zuschneiden (Resize, Crop)



In der modernen Webentwicklung und bei der Erstellung von Desktop-Anwendungen besteht häufig die Notwendigkeit, Bilder programmatisch zu verarbeiten: ihre Größe für Vorschaubilder zu ändern (Resize), überflüssige Ränder zuzuschneiden (Crop) oder sie an ein bestimmtes Format anzupassen. Die .NET-Plattform bietet mehrere Ansätze zur Lösung dieser Aufgaben. In diesem Artikel werden wir die Arbeit mit der Bibliothek SixLabors.ImageSharp im Detail besprechen – einem leistungsstarken, plattformübergreifenden Werkzeug zur Bildverarbeitung in C#.



Warum ImageSharp?



Früher war die Bibliothek System.Drawing die Standardlösung, aber sie hat Einschränkungen: Sie funktioniert nur unter Windows, erfordert installierte GDI+-Komponenten und ist nicht für moderne Webanwendungen optimiert. ImageSharp hat diese Nachteile nicht:

  • Vollständig in verwaltetem C#-Code geschrieben.
  • Funktioniert unter Windows, Linux, macOS.
  • Unterstützt gängige Formate: JPEG, PNG, BMP, GIF, WebP.
  • Hohe Leistung und Sicherheit.


Installation der Bibliothek



Erstellen Sie zunächst ein neues C#-Projekt (.NET 6+) und installieren Sie das Paket über NuGet:

dotnet add package SixLabors.ImageSharp

Oder über den Visual Studio-Paketmanager: Install-Package SixLabors.ImageSharp.



Größenänderung eines Bildes (Resize)



Die Funktion Resize ermöglicht es, ein Bild zu verkleinern oder zu vergrößern, wobei die Proportionen beibehalten oder genaue Abmessungen festgelegt werden können. Betrachten wir ein Beispiel, bei dem wir ein Bild laden und es auf eine Breite von 300 Pixeln verkleinern, wobei die Höhe automatisch angepasst wird:



using SixLabors.ImageSharp;using SixLabors.ImageSharp.Processing;

// Laden des Originalbildesusing (Image image = Image.Load("input.jpg")){ // Größenänderung: Breite 300, Höhe wird automatisch berechnet image.Mutate(x => x.Resize(300, 0));

// Speichern des Ergebnisses image.Save("output_resize.jpg");}


Mit dem zweiten Parameter 0 geben wir an, dass die Höhe automatisch berechnet werden soll, um die Proportionen beizubehalten. Wenn Sie genaue Abmessungen festlegen möchten (z. B. 300x200), geben Sie beide Werte an:



image.Mutate(x => x.Resize(300, 200)); // Mögliche Verzerrung der Proportionen


Um die Proportionen bei einer genauen Größe beizubehalten, verwenden Sie den Modus ResizeMode.Pad oder ResizeMode.Crop:



image.Mutate(x => x.Resize(new ResizeOptions{    Size = new Size(300, 200),    Mode = ResizeMode.Crop // Schneidet die Ränder ab, um in die Größe zu passen}));


Zuschneiden eines Bildes (Crop)



Das Zuschneiden (Crop) ermöglicht es, einen rechteckigen Bereich aus dem Originalbild auszuschneiden. Dies ist nützlich zum Erstellen von Avataren, Miniaturansichten oder zum Entfernen von leeren Bereichen. Beispiel – wir schneiden einen zentralen Bereich mit den Maßen 200x150 Pixel aus:



using (Image image = Image.Load("input.jpg")){    // Definieren der Koordinaten und der Größe des auszuschneidenden Bereichs    Rectangle cropRect = new Rectangle(        x: (image.Width - 200) / 2,   // Horizontal zentrieren        y: (image.Height - 150) / 2,  // Vertikal zentrieren        width: 200,        height: 150    );

// Ausführen des Zuschnitts image.Mutate(x => x.Crop(cropRect));

// Speichern des Ergebnisses image.Save("output_crop.jpg");}


Wenn Sie das Bild manuell zuschneiden möchten (z. B. die obere linke Ecke 100x100):



image.Mutate(x => x.Crop(new Rectangle(0, 0, 100, 100)));


Kombinieren von Operationen: Resize + Crop



Häufig ist es erforderlich, zuerst die Größe zu ändern und dann auf das gewünschte Format zuzuschneiden. ImageSharp ermöglicht es, Operationen in einer Kette zu kombinieren:



using (Image image = Image.Load("input.jpg")){    // Schritt 1: Verkleinern auf eine Breite von 400 Pixeln (proportional)    image.Mutate(x =>                    

Empfehlungen