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.Layers op positie; de volgorde van de array komt overeen met de eigen laagvolgorde van het document.
  • BlendModeKey accepteert elke BlendMode enum-waarde — er wordt geen validatie uitgevoerd ten opzichte van de gedeclareerde kleurmodus van het document.
  • ChannelInformation, LayerMaskData en LayerBlendingRangesData kunnen worden gelezen maar nooit opnieuw toegewezen.
  • Roep PsdImage.Save() één keer aan na alle bewerkingen; elke oproep schrijft het volledige document.

Veelvoorkomende problemen

ProbleemOorzaakOplossing
NotSupportedException bij het instellen van ChannelInformation, LayerMaskData of LayerBlendingRangesDataDeze 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 laagNiet elke laag heeft een masker-subsectieControleer 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/MethodeBeschrijving
PsdImage.LayersHaalt of stelt de laagcollectie in — alleen instelbaar voor verwijderen/herordenen
Layer.Name / IsVisible / Opacity / Clipping / BlendModeKey / Top / Left / Bottom / RightOndersteunde bewerkingen van laagmetadata
Layer.Bounds / Width / Height / ChannelsCountAlleen-lezen laaggeometrie
Layer.ChannelInformation / LayerMaskData / LayerBlendingRangesDataAlleen-lezen kanaal/masker/blending metadata

Zie ook

 Nederlands