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.Layersdupă poziție; ordinea tabloului corespunde ordinii straturilor din document. BlendModeKeyacceptă orice valoare enumBlendMode— nu se efectuează nicio validare în raport cu modul de culoare declarat al documentului.ChannelInformation,LayerMaskDatașiLayerBlendingRangesDatapot 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 LayerBlendingRangesData | Aceste 3 proprietăți sunt doar pentru citire în versiunea FOSS, în ciuda faptului că au un setter | Citește valoarea; nu încerca să o reasignezi |
LayerMaskData este null pentru un strat | Nu 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.Layers | Obține sau stabilește colecția de straturi — setabilă doar pentru eliminare/reordonare |
Layer.Name / IsVisible / Opacity / Clipping / BlendModeKey / Top / Left / Bottom / Right | Editări de metadate ale stratului acceptate |
Layer.Bounds / Width / Height / ChannelsCount | Geometrie a stratului numai în citire |
Layer.ChannelInformation / LayerMaskData / LayerBlendingRangesData | Metadate de canal/mască/fuzionare doar în citire |