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.Layersnach Position; die Reihenfolge des Arrays stimmt mit der Layer-Reihenfolge des Dokuments überein. BlendModeKeyakzeptiert jedenBlendMode-Enum-Wert — es wird keine Validierung gegenüber dem im Dokument deklarierten Farbmodus durchgeführt.ChannelInformation,LayerMaskDataundLayerBlendingRangesDatakönnen gelesen, aber nie neu zugewiesen werden.- Rufe
PsdImage.Save()einmal nach allen Änderungen auf; jeder Aufruf schreibt das komplette Dokument.
Häufige Probleme
| Problem | Ursache | Lösung |
|---|---|---|
NotSupportedException beim Einstellen von ChannelInformation, LayerMaskData oder LayerBlendingRangesData | Diese 3 Eigenschaften sind im FOSS-Build schreibgeschützt, obwohl sie einen Setter haben | Lese den Wert; versuche nicht, ihn neu zuzuweisen |
LayerMaskData ist null für eine Ebene | Nicht 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/Methode | Beschreibung |
|---|---|
PsdImage.Layers | Liest oder setzt die Ebenensammlung — nur zum Entfernen/Neuordnen einstellbar |
Layer.Name / IsVisible / Opacity / Clipping / BlendModeKey / Top / Left / Bottom / Right | Unterstützte Ebenen-Metadatenbearbeitungen |
Layer.Bounds / Width / Height / ChannelsCount | Schreibgeschützte Ebenengeometrie |
Layer.ChannelInformation / LayerMaskData / LayerBlendingRangesData | Schreibgeschützte Kanal-/Masken-/Blending-Metadaten |