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.Layersefter position; arrayens ordning matchar dokumentets egen lagerordning. BlendModeKeyaccepterar vilketBlendMode-enumvärde som helst — ingen validering utförs mot dokumentets deklarerade färgläge.ChannelInformation,LayerMaskDataochLayerBlendingRangesDatakan läsas men aldrig tilldelas på nytt.- Anropa
PsdImage.Save()en gång efter alla redigeringar; varje anrop skriver hela dokumentet.
Vanliga problem
| Problem | Orsak | Lösning |
|---|---|---|
NotSupportedException vid inställning av ChannelInformation, LayerMaskData eller LayerBlendingRangesData | Dessa 3 egenskaper är skrivskyddade i FOSS build trots att de har en setter | Läs värdet; försök inte att tilldela om det |
LayerMaskData är null för ett lager | Inte alla lager har ett maskavsnitt | Kontrollera 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/Metod | Beskrivning |
|---|---|
PsdImage.Layers | Hämtar eller anger lagerkollektionen — endast inställningsbar för borttagning/omordning |
Layer.Name / IsVisible / Opacity / Clipping / BlendModeKey / Top / Left / Bottom / Right | Stödda redigeringar av lagermetadata |
Layer.Bounds / Width / Height / ChannelsCount | Skrivskyddad lagergeometri |
Layer.ChannelInformation / LayerMaskData / LayerBlendingRangesData | Skrivskyddad kanal/mask/blandningsmetadata |