Layers

Layers

PsdImage.Layers returnează fiecare strat analizat ca un Layer array. Fiecare Layer expune geometria, vizibilitatea și starea de compunere proprii, precum și metadatele despre canalele sale, masca și intervalele de amestecare.


Citirea metadatelor stratului

Name, Bounds (și derivatele Width/Height/Top/Left/Bottom/Right), IsVisible, Opacity, Clipping, BlendModeKey și ChannelsCount pot fi citite direct.

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

Editări de metadate suportate

Name, IsVisible, Opacity, Clipping, BlendModeKey și cele patru margini de limită (Top/Left/Bottom/Right) pot fi modificate la fața locului și scrise înapoi cu 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);

Metadate de canal și mască

ChannelInformation, LayerMaskData și LayerBlendingRangesData sunt doar citire în această construcție FOSS — setter-urile lor aruncă 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}");
}

Eliminarea sau reordonarea straturilor

PsdImage.Layers are un setter, precum și un getter: atribuirea unui tablou filtrat sau reordonat înlocuiește colecția de straturi a documentului. Nu există nicio metodă publică de a construi o instanță complet nouă de Layer, așa că aceasta suportă doar eliminarea sau reordonarea straturilor deja existente — nu adăugarea uneia de la zero.

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

Sfaturi și bune practici

  • Indexați în image.Layers după poziție; ordinea tabloului corespunde ordinii straturilor din document.
  • BlendModeKey acceptă orice valoare enum BlendMode — nu se efectuează nicio validare în raport cu modul de culoare declarat al documentului.
  • ChannelInformation, LayerMaskData și LayerBlendingRangesData pot fi citite, dar nu pot fi reasignate.
  • Apelați PsdImage.Save() o singură dată după toate editările; fiecare apel scrie întregul document.

Probleme comune

ProblemăCauzăRemediere
NotSupportedException când se setează ChannelInformation, LayerMaskData sau LayerBlendingRangesDataAceste 3 proprietăți sunt doar pentru citire în versiunea FOSS, în ciuda faptului că au un setterCitește valoarea; nu încerca să o reasignezi
LayerMaskData este null pentru un stratNu fiecare strat are o subsecțiune de mascăVerificați null înainte de utilizare (layer.LayerMaskData is { } mask)

FAQ

Pot să elimin un strat?

Da — reasignați image.Layers la un tablou filtrat. Nu puteți adăuga un strat nou, deoarece Layer nu are un constructor public; doar straturile parsate existente pot fi păstrate, eliminate sau reordonate.

Pot să modific datele de canal sau mască ale unui strat?

Nu. ChannelInformation, LayerMaskData și LayerBlendingRangesData sunt numai în citire — doar Name, IsVisible, Opacity, Clipping, BlendModeKey și marginile limită pot fi modificate.


API Reference Rezumat

Clasă/MetodăDescriere:
PsdImage.LayersObține sau stabilește colecția de straturi — setabilă doar pentru eliminare/reordonare
Layer.Name / IsVisible / Opacity / Clipping / BlendModeKey / Top / Left / Bottom / RightEditări de metadate ale stratului acceptate
Layer.Bounds / Width / Height / ChannelsCountGeometrie a stratului numai în citire
Layer.ChannelInformation / LayerMaskData / LayerBlendingRangesDataMetadate de canal/mască/fuzionare doar în citire

Vezi și:

 Română