Layers
Layers
PsdImage.Layers vrací každou analyzovanou vrstvu jako pole Layer. Každý Layer zveřejňuje svou vlastní geometrii, viditelnost a stav skládání a metadata o svých kanálech, masce a rozsazích míchání.
Čtení metadat vrstvy
Name, Bounds (a odvozené Width/Height/Top/Left/Bottom/Right), IsVisible, Opacity, Clipping, BlendModeKey a ChannelsCount jsou všechny čitelné přímo.
foreach (Layer layer in image.Layers)
{
Console.WriteLine($"{layer.Name}: {layer.Bounds}, " +
$"Visible={layer.IsVisible}, Opacity={layer.Opacity}, " +
$"BlendMode={layer.BlendModeKey}");
}Podporované úpravy metadat
Name, IsVisible, Opacity, Clipping, BlendModeKey a čtyři hraniční okraje (Top/Left/Bottom/Right) mohou být změněny na místě a zapsány zpět pomocí 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);Metadata kanálů a masky
ChannelInformation, LayerMaskData a LayerBlendingRangesData jsou v tomto FOSS buildu pouze ke čtení — jejich settery vyhazují 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}");
}Odstraňování nebo přeskupování vrstev
PsdImage.Layers má jak setter, tak getter: přiřazením filtrovaného nebo přeskupeného pole nahradí kolekci vrstev dokumentu. Neexistuje veřejný způsob, jak vytvořit zcela novou instanci Layer, takže tato funkce podporuje jen odstraňování nebo přeskupování již existujících vrstev — nepodporuje přidání vrstvy od nuly.
// Keep only visible layers
image.Layers = image.Layers.Where(layer => layer.IsVisible).ToArray();
image.Save(outputPath);Tipy a osvědčené postupy
- Indexujte do
image.Layerspodle pozice; pořadí v poli odpovídá pořadí vrstev v dokumentu. BlendModeKeypřijímá libovolnou výčtovou hodnotuBlendMode— neprovádí se žádná validace vůči deklarovanému barevnému režimu dokumentu.ChannelInformation,LayerMaskDataaLayerBlendingRangesDatalze číst, ale nikdy nepřiřadit.- Zavolejte
PsdImage.Save()jednou po všech úpravách; každé volání zapíše celý dokument.
Časté problémy
| Problém | Příčina | Oprava |
|---|---|---|
NotSupportedException při nastavování ChannelInformation, LayerMaskData nebo LayerBlendingRangesData | Tyto 3 vlastnosti jsou v FOSS sestavení jen pro čtení, přestože mají setter | Přečtěte hodnotu; nepokoušejte se ji znovu přiřadit |
LayerMaskData je null pro vrstvu | Ne každá vrstva má podsekci masky | Zkontrolujte null před použitím (layer.LayerMaskData is { } mask) |
FAQ
Mohu odebrat vrstvu?
Ano — přiřaďte image.Layers filtrovému poli. Nemůžete přidat zcela novou vrstvu, protože Layer nemá veřejný konstruktor; lze jen zachovat, odebrat nebo přeuspořádat existující analyzované vrstvy.
Mohu změnit kanál vrstvy nebo maskovací data?
Ne. ChannelInformation, LayerMaskData a LayerBlendingRangesData jsou pouze pro čtení — lze měnit pouze Name, IsVisible, Opacity, Clipping, BlendModeKey a okrajové hranice.
Shrnutí API Reference
| Třída/Metoda | Popis: |
|---|---|
PsdImage.Layers | Získá nebo nastaví kolekci vrstev — nastavitelná pouze pro odebrání/přeskupení |
Layer.Name / IsVisible / Opacity / Clipping / BlendModeKey / Top / Left / Bottom / Right | Podporované úpravy metadat vrstev |
Layer.Bounds / Width / Height / ChannelsCount | Geometrie vrstvy jen pro čtení |
Layer.ChannelInformation / LayerMaskData / LayerBlendingRangesData | Metadata kanálu/masky/smíchání jen pro čtení |