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.ImageSharpOder ü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 ProportionenUm 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 => Auch in der Bibliothek
MailKit für C# (.NET): Komplettguide mit Praxisbeispielen
Logging in Kotlin: Überblick über die besten Bibliotheken und Lösungen
tsx für TypeScript: Vollständige Anleitung mit Beispielen