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.Layers podle pozice; pořadí v poli odpovídá pořadí vrstev v dokumentu.
  • BlendModeKey přijímá libovolnou výčtovou hodnotu BlendMode — neprovádí se žádná validace vůči deklarovanému barevnému režimu dokumentu.
  • ChannelInformation, LayerMaskData a LayerBlendingRangesData lze čí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émPříčinaOprava
NotSupportedException při nastavování ChannelInformation, LayerMaskData nebo LayerBlendingRangesDataTyto 3 vlastnosti jsou v FOSS sestavení jen pro čtení, přestože mají setterPřečtěte hodnotu; nepokoušejte se ji znovu přiřadit
LayerMaskData je null pro vrstvuNe každá vrstva má podsekci maskyZkontrolujte 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/MetodaPopis:
PsdImage.LayersZíská nebo nastaví kolekci vrstev — nastavitelná pouze pro odebrání/přeskupení
Layer.Name / IsVisible / Opacity / Clipping / BlendModeKey / Top / Left / Bottom / RightPodporované úpravy metadat vrstev
Layer.Bounds / Width / Height / ChannelsCountGeometrie vrstvy jen pro čtení
Layer.ChannelInformation / LayerMaskData / LayerBlendingRangesDataMetadata kanálu/masky/smíchání jen pro čtení

Viz také:

 Čeština