Wie man mit PSD-Ebenen in .NET arbeitet

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 build

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

Siehe auch

 Deutsch