Layers

Layers

PsdImage.Layers returnerar varje parsad lager som en Layer array. Varje Layer exponerar sin egen geometri, synlighet och sammansättningsstatus, samt metadata om dess kanaler, mask och blandningsintervall.


Läsa lagermetadata

Name, Bounds (och de avledda Width/Height/Top/Left/Bottom/Right), IsVisible, Opacity, Clipping, BlendModeKey och ChannelsCount kan alla läsas direkt.

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

Stödda metadataändringar

Name, IsVisible, Opacity, Clipping, BlendModeKey och de fyra gränskanterna (Top/Left/Bottom/Right) kan ändras på plats och skrivas tillbaka med 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);

Kanal- och maskmetadata

ChannelInformation, LayerMaskData och LayerBlendingRangesData är skrivskyddade i detta FOSS-bygge — deras set-metoder kastar 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}");
}

Ta bort eller omordna lager

PsdImage.Layers har både en setter och en getter: att tilldela en filtrerad eller omordnad array ersätter dokumentets lagerkollektion. Det finns inget offentligt sätt att konstruera en helt ny Layer-instans, så detta stödjer endast att ta bort eller omordna lager som redan finns — inte att lägga till ett från grunden.

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

Tips och bästa praxis

  • Indexera image.Layers efter position; arrayens ordning matchar dokumentets egen lagerordning.
  • BlendModeKey accepterar vilket BlendMode-enumvärde som helst — ingen validering utförs mot dokumentets deklarerade färgläge.
  • ChannelInformation, LayerMaskData och LayerBlendingRangesData kan läsas men aldrig tilldelas på nytt.
  • Anropa PsdImage.Save() en gång efter alla redigeringar; varje anrop skriver hela dokumentet.

Vanliga problem

ProblemOrsakLösning
NotSupportedException vid inställning av ChannelInformation, LayerMaskData eller LayerBlendingRangesDataDessa 3 egenskaper är skrivskyddade i FOSS build trots att de har en setterLäs värdet; försök inte att tilldela om det
LayerMaskData är null för ett lagerInte alla lager har ett maskavsnittKontrollera null före användning (layer.LayerMaskData is { } mask)

FAQ

Kan jag ta bort ett lager?

Ja — tilldela om image.Layers till en filtrerad array. Du kan inte lägga till ett helt nytt lager, eftersom Layer saknar publik konstruktor; endast befintliga parsade lager kan behållas, tas bort eller omordnas.

Kan jag ändra lagrets kanal- eller maskdata?

Nej. ChannelInformation, LayerMaskData och LayerBlendingRangesData är skrivskyddade — endast Name, IsVisible, Opacity, Clipping, BlendModeKey och gränskanter kan ändras.


API Reference Sammanfattning

Klass/MetodBeskrivning
PsdImage.LayersHämtar eller anger lagerkollektionen — endast inställningsbar för borttagning/omordning
Layer.Name / IsVisible / Opacity / Clipping / BlendModeKey / Top / Left / Bottom / RightStödda redigeringar av lagermetadata
Layer.Bounds / Width / Height / ChannelsCountSkrivskyddad lagergeometri
Layer.ChannelInformation / LayerMaskData / LayerBlendingRangesDataSkrivskyddad kanal/mask/blandningsmetadata

Se även

 Svenska