Layers
Layers
PsdImage.Layers retourneert elke geparseerde laag als een Layer array. Elke Layer toont zijn eigen geometrie, zichtbaarheid en compositiestatus, en metadata over zijn kanalen, masker en mengbereiken.
Laagmetadata lezen
Name, Bounds (en de afgeleide Width/Height/Top/Left/Bottom/Right), IsVisible, Opacity, Clipping, BlendModeKey, en ChannelsCount kunnen allemaal direct gelezen worden.
foreach (Layer layer in image.Layers)
{
Console.WriteLine($"{layer.Name}: {layer.Bounds}, " +
$"Visible={layer.IsVisible}, Opacity={layer.Opacity}, " +
$"BlendMode={layer.BlendModeKey}");
}Ondersteunde metadata-bewerkingen
Name, IsVisible, Opacity, Clipping, BlendModeKey, en de vier randgrenzen (Top/Left/Bottom/Right) kunnen ter plekke worden aangepast en teruggeschreven met PsdImage.Save().
Layer layer = image.Layers[0];
layer.Name = $"{layer.Name} (edited)";
layer.IsVisible = !layer.IsVisible;
layer.Opacity = 128;
layer.BlendModeKey = BlendMode.Multiply;
image.Save(outputPath);Kanaal- en maskermetadata
ChannelInformation, LayerMaskData en LayerBlendingRangesData zijn alleen-lezen in deze FOSS-build — hun setters gooien 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}");
}Lagen verwijderen of herschikken
PsdImage.Layers heeft zowel een setter als een getter: het toewijzen van een gefilterde of herschikte array vervangt de laagverzameling van het document. Er is geen openbare manier om een gloednieuwe Layer-instantie te maken, dus dit ondersteunt alleen het verwijderen of herschikken van reeds aanwezige lagen — niet het toevoegen van een nieuwe vanaf nul.
// Keep only visible layers
image.Layers = image.Layers.Where(layer => layer.IsVisible).ToArray();
image.Save(outputPath);Tips en best practices
- Indexeer in
image.Layersop positie; de volgorde van de array komt overeen met de eigen laagvolgorde van het document. BlendModeKeyaccepteert elkeBlendModeenum-waarde — er wordt geen validatie uitgevoerd ten opzichte van de gedeclareerde kleurmodus van het document.ChannelInformation,LayerMaskDataenLayerBlendingRangesDatakunnen worden gelezen maar nooit opnieuw toegewezen.- Roep
PsdImage.Save()één keer aan na alle bewerkingen; elke oproep schrijft het volledige document.
Veelvoorkomende problemen
| Probleem | Oorzaak | Oplossing |
|---|---|---|
NotSupportedException bij het instellen van ChannelInformation, LayerMaskData of LayerBlendingRangesData | Deze 3 eigenschappen zijn alleen-lezen in de FOSS-build, ondanks dat ze een setter hebben. | Lees de waarde; probeer deze niet opnieuw toe te wijzen |
LayerMaskData is null voor een laag | Niet elke laag heeft een masker-subsectie | Controleer op null vóór gebruik (layer.LayerMaskData is { } mask) |
FAQ
Kan ik een laag verwijderen?
Ja — ken image.Layers opnieuw toe aan een gefilterde array. Je kunt geen geheel nieuwe laag toevoegen, omdat Layer geen publieke constructor heeft; alleen bestaande geparseerde lagen kunnen worden behouden, verwijderd of herschikt.
Kan ik de kanaal- of maskergegevens van een laag wijzigen?
Nee. ChannelInformation, LayerMaskData en LayerBlendingRangesData zijn alleen-lezen — alleen Name, IsVisible, Opacity, Clipping, BlendModeKey en de begrenzingsranden kunnen worden gewijzigd.
API Reference Samenvatting
| Klasse/Methode | Beschrijving |
|---|---|
PsdImage.Layers | Haalt of stelt de laagcollectie in — alleen instelbaar voor verwijderen/herordenen |
Layer.Name / IsVisible / Opacity / Clipping / BlendModeKey / Top / Left / Bottom / Right | Ondersteunde bewerkingen van laagmetadata |
Layer.Bounds / Width / Height / ChannelsCount | Alleen-lezen laaggeometrie |
Layer.ChannelInformation / LayerMaskData / LayerBlendingRangesData | Alleen-lezen kanaal/masker/blending metadata |