Layers

Layers

PsdImage.Layers gibt jede geparste Ebene als Layer-Array zurück. Jede Layer stellt ihre eigene Geometrie, Sichtbarkeit und Kompositionsstatus sowie Metadaten über ihre Kanäle, Maske und Mischbereiche bereit.


Lesen von Ebenen-Metadaten

Name, Bounds (und die abgeleiteten Width/Height/Top/Left/Bottom/Right), IsVisible, Opacity, Clipping, BlendModeKey und ChannelsCount sind alle direkt lesbar.

foreach (Layer layer in image.Layers)
{
    Console.WriteLine($"{layer.Name}: {layer.Bounds}, " +
                       $"Visible={layer.IsVisible}, Opacity={layer.Opacity}, " +
                       $"BlendMode={layer.BlendModeKey}");
}

Unterstützte Metadatenbearbeitungen

Name, IsVisible, Opacity, Clipping, BlendModeKey und die vier Begrenzungsränder (Top/Left/Bottom/Right) können vor Ort geändert und mit PsdImage.Save() zurückgeschrieben werden.

Layer layer = image.Layers[0];
layer.Name = $"{layer.Name} (edited)";
layer.IsVisible = !layer.IsVisible;
layer.Opacity = 128;
layer.BlendModeKey = BlendMode.Multiply;
image.Save(outputPath);

Kanal- und Masken-Metadaten

ChannelInformation, LayerMaskData und LayerBlendingRangesData sind in dieser FOSS-Build schreibgeschützt — ihre Setter werfen NotSupportedException.

foreach (ChannelInformation channel in layer.ChannelInformation)
{
    Console.WriteLine($"Channel {channel.ChannelID}: {channel.CompressionMethod}, {channel.Length} bytes");
}

if (layer.LayerMaskData is { } mask)
{
    Console.WriteLine($"Mask bounds: {mask.MaskRectangle}, flags: {mask.Flags}");
}

Entfernen oder Neuordnen von Layern

PsdImage.Layers hat sowohl einen Setter als auch einen Getter: Das Zuweisen eines gefilterten oder neu geordneten Arrays ersetzt die Layer-Kollektion des Dokuments. Es gibt keinen öffentlichen Weg, eine brandneue Layer-Instanz zu erstellen, daher unterstützt dies nur das Entfernen oder Neuordnen bereits vorhandener Layer — nicht das Hinzufügen eines neuen von Grund auf.

// Keep only visible layers
image.Layers = image.Layers.Where(layer => layer.IsVisible).ToArray();
image.Save(outputPath);

Tipps und bewährte Vorgehensweisen

  • Indexiere image.Layers nach Position; die Reihenfolge des Arrays stimmt mit der Layer-Reihenfolge des Dokuments überein.
  • BlendModeKey akzeptiert jeden BlendMode-Enum-Wert — es wird keine Validierung gegenüber dem im Dokument deklarierten Farbmodus durchgeführt.
  • ChannelInformation, LayerMaskData und LayerBlendingRangesData können gelesen, aber nie neu zugewiesen werden.
  • Rufe PsdImage.Save() einmal nach allen Änderungen auf; jeder Aufruf schreibt das komplette Dokument.

Häufige Probleme

ProblemUrsacheLösung
NotSupportedException beim Einstellen von ChannelInformation, LayerMaskData oder LayerBlendingRangesDataDiese 3 Eigenschaften sind im FOSS-Build schreibgeschützt, obwohl sie einen Setter habenLese den Wert; versuche nicht, ihn neu zuzuweisen
LayerMaskData ist null für eine EbeneNicht jede Ebene hat einen MaskenunterabschnittÜberprüfen Sie null vor der Verwendung (layer.LayerMaskData is { } mask)

FAQ

Kann ich eine Ebene entfernen?

Ja — weise image.Layers einem gefilterten Array zu. Du kannst keine brandneue Ebene hinzufügen, da Layer keinen öffentlichen Konstruktor hat; nur bereits geparste Ebenen können behalten, entfernt oder neu angeordnet werden.

Kann ich die Kanal- oder Maskendaten einer Ebene ändern?

Nein. ChannelInformation, LayerMaskData und LayerBlendingRangesData sind schreibgeschützt — nur Name, IsVisible, Opacity, Clipping, BlendModeKey und die Begrenzungsränder können geändert werden.


API Reference Zusammenfassung

Klasse/MethodeBeschreibung
PsdImage.LayersLiest oder setzt die Ebenensammlung — nur zum Entfernen/Neuordnen einstellbar
Layer.Name / IsVisible / Opacity / Clipping / BlendModeKey / Top / Left / Bottom / RightUnterstützte Ebenen-Metadatenbearbeitungen
Layer.Bounds / Width / Height / ChannelsCountSchreibgeschützte Ebenengeometrie
Layer.ChannelInformation / LayerMaskData / LayerBlendingRangesDataSchreibgeschützte Kanal-/Masken-/Blending-Metadaten

Siehe auch

 Deutsch