Layers

Layers

PsdImage.Layers restituisce ogni livello analizzato come un array Layer. Ogni Layer espone la propria geometria, visibilità e stato di composizione, e i metadati relativi ai suoi canali, maschera e intervalli di fusione.


Lettura dei metadati del livello

Name, Bounds (e i derivati Width/Height/Top/Left/Bottom/Right), IsVisible, Opacity, Clipping, BlendModeKey e ChannelsCount sono tutti leggibili direttamente.

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

Modifiche ai metadati supportate

Name, IsVisible, Opacity, Clipping, BlendModeKey e i quattro bordi dei limiti (Top/Left/Bottom/Right) possono essere modificati in loco e riscritti con 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);

Metadati di canale e maschera

ChannelInformation, LayerMaskData e LayerBlendingRangesData sono di sola lettura in questa build FOSS — i loro setter generano 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}");
}

Rimozione o riordino dei livelli

PsdImage.Layers ha sia un setter che un getter: assegnare un array filtrato o riordinato sostituisce la collezione di livelli del documento. Non esiste un modo pubblico per creare una nuova istanza di Layer, quindi questo supporta solo la rimozione o il riordino dei livelli già presenti — non l’aggiunta di uno da zero.

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

Consigli e migliori pratiche

  • Indicizza image.Layers per posizione; l’ordine dell’array corrisponde all’ordine dei livelli del documento.
  • BlendModeKey accetta qualsiasi valore enum di BlendMode — non viene eseguita alcuna convalida rispetto alla modalità colore dichiarata del documento.
  • ChannelInformation, LayerMaskData e LayerBlendingRangesData possono essere letti ma mai riassegnati.
  • Chiama PsdImage.Save() una volta dopo tutte le modifiche; ogni chiamata scrive l’intero documento.

Problemi comuni

ProblemaCausaCorrezione
NotSupportedException durante l’impostazione di ChannelInformation, LayerMaskData o LayerBlendingRangesDataQueste 3 proprietà sono di sola lettura nella build FOSS nonostante abbiano un setterLeggi il valore; non tentare di riassegnarlo
LayerMaskData è null per un livelloNon tutti i livelli hanno una sottosezione mascheraVerifica la presenza di null prima dell’uso (layer.LayerMaskData is { } mask)

FAQ

Posso rimuovere un livello?

Sì — riassegna image.Layers a un array filtrato. Non puoi aggiungere un nuovo livello, poiché Layer non ha un costruttore pubblico; solo i livelli analizzati esistenti possono essere mantenuti, rimossi o riordinati.

Posso modificare i dati del canale o della maschera di un livello?

No. ChannelInformation, LayerMaskData e LayerBlendingRangesData sono di sola lettura — solo Name, IsVisible, Opacity, Clipping, BlendModeKey e i bordi dei limiti possono essere modificati.


API Reference Riepilogo

Classe/MetodoDescrizione
PsdImage.LayersOttiene o imposta la raccolta di layer — impostabile solo per rimozione/riordino
Layer.Name / IsVisible / Opacity / Clipping / BlendModeKey / Top / Left / Bottom / RightModifiche dei metadati del layer supportate
Layer.Bounds / Width / Height / ChannelsCountGeometria del layer a sola lettura
Layer.ChannelInformation / LayerMaskData / LayerBlendingRangesDataMetadati di canale/maschera/blending in sola lettura

Vedi anche

 Italiano