Wie man mit PSD-Ebenen in .NET arbeitet
Dieses Handbuch zeigt, wie man die Ebenen eines Dokuments auflistet, editierbare Ebenen-Metadaten liest und ändert, eine Ebene neu positioniert und eine Ebene aus der Sammlung entfernt. Die Layers-Eigenschaft eines geladenen PsdImage gibt seine Sammlung von Layer-Objekten zurück. Jede Layer stellt editierbare Metadaten bereit — Name, Sichtbarkeit, Deckkraft, Clipping, Mischmodus und Position (Randkanten) — sowie schreibgeschützte Gesamtabmessungen und Kanalinformationen.
Schritt-für-Schritt-Anleitung
Schritt 1: Paket installieren
git clone https://github.com/aspose-psd-foss/Aspose.PSD-FOSS-for-.NET.git
cd Aspose.PSD-FOSS-for-.NET
dotnet buildSchritt 2: Erforderliche Klassen importieren
Die später verwendeten LINQ-Erweiterungsmethoden (Where) stammen aus System.Linq; die PSD-spezifischen Typen kommen aus den beiden Aspose.PSD Namespaces unten.
using System.Linq;
using Aspose.PSD.FileFormats.Psd;
using Aspose.PSD.FileFormats.Core.Blending;Schritt 3: Dokument laden und seine Ebenen auflisten
Laden Sie das Dokument und iterieren Sie dann Layers, um den Namen und die Geometrie jeder Ebene zu sehen:
using var image = PsdImage.Load("input.psd");
foreach (var layer in image.Layers)
{
Console.WriteLine($"{layer.Name}: {layer.Width}x{layer.Height} at ({layer.Left},{layer.Top})");
}Schritt 4: Ebenen-Sichtbarkeit, Deckkraft und Mischmodus lesen und bearbeiten
IsVisible, Opacity (0-255), Clipping, Name und BlendModeKey haben alle funktionierende Setter:
var layer = image.Layers[0];
layer.IsVisible = false; // hide the layer
layer.Opacity = 200; // ~78% opacity
layer.BlendModeKey = BlendMode.Multiply;
layer.Name = "Renamed Layer";Schritt 5: Ebenengrenzen lesen und neu positionieren
Bounds, Width, Height und ChannelsCount sind schreibgeschützt — aber Top, Left, Bottom und Right haben jeweils einen funktionierenden Setter, der die Ebene neu positioniert:
Console.WriteLine($"Bounds: {layer.Bounds}");
Console.WriteLine($"Channels: {layer.ChannelsCount}");
layer.Left = 10;
layer.Top = 20;
layer.Right = 40;
layer.Bottom = 60;Schritt 6: Ebenensammlung ersetzen
PsdImage.Layers selbst hat einen funktionierenden Setter, sodass Sie die gesamte Sammlung ersetzen können (zum Beispiel, um eine Ebene zu entfernen):
image.Layers = image.Layers.Where(l => l.Name != "Renamed Layer").ToArray();Schritt 7: Dokument speichern
Persistiere jede in den vorherigen Schritten vorgenommene Bearbeitung zurück auf die Festplatte:
image.Save("output.psd");Häufige Probleme und Lösungen
NotSupportedException beim Einstellen ChannelInformation, LayerMaskData, oder LayerBlendingRangesData. Diese drei Layer Setter werden in dieser FOSS-Version nicht unterstützt — behandeln Sie sie als schreibgeschützt.
Der Opazitätswert scheint nach dem Einstellen falsch zu sein. Opacity ist ein byte (0-255), nicht ein 0.0-1.0-Bruch oder ein Prozentsatz — layer.Opacity = 200 bedeutet etwa 78% undurchsichtig (200/255).
Änderungen an einer Ebene werden nach dem Speichern nicht angezeigt. Bestätigen Sie, dass Sie das Layer Instanz, die von image.Layers, und dass Sie image.Save nach dem Vornehmen Ihrer Änderungen.
Häufig gestellte Fragen
Kann ich eine Ebene aus einem Dokument entfernen?
Ja — PsdImage.Layers hat einen funktionierenden Setter, sodass Sie ihm ein gefiltertes Array zuweisen können, um Ebenen zu entfernen (siehe Schritt 6).
Welche Mischmodi sind verfügbar?
BlendMode enthält Werte wie Normal, Multiply, Screen, Overlay und Darken unter anderem — festgelegt über Layer.BlendModeKey.
Sind Ebenenmaskendaten verfügbar?
Layer.LayerMaskData hat einen funktionierenden Getter, aber sein Setter wirft NotSupportedException in diesem FOSS-Build.