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.Layersper posizione; l’ordine dell’array corrisponde all’ordine dei livelli del documento. BlendModeKeyaccetta qualsiasi valore enum diBlendMode— non viene eseguita alcuna convalida rispetto alla modalità colore dichiarata del documento.ChannelInformation,LayerMaskDataeLayerBlendingRangesDatapossono essere letti ma mai riassegnati.- Chiama
PsdImage.Save()una volta dopo tutte le modifiche; ogni chiamata scrive l’intero documento.
Problemi comuni
| Problema | Causa | Correzione |
|---|---|---|
NotSupportedException durante l’impostazione di ChannelInformation, LayerMaskData o LayerBlendingRangesData | Queste 3 proprietà sono di sola lettura nella build FOSS nonostante abbiano un setter | Leggi il valore; non tentare di riassegnarlo |
LayerMaskData è null per un livello | Non tutti i livelli hanno una sottosezione maschera | Verifica 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/Metodo | Descrizione |
|---|---|
PsdImage.Layers | Ottiene o imposta la raccolta di layer — impostabile solo per rimozione/riordino |
Layer.Name / IsVisible / Opacity / Clipping / BlendModeKey / Top / Left / Bottom / Right | Modifiche dei metadati del layer supportate |
Layer.Bounds / Width / Height / ChannelsCount | Geometria del layer a sola lettura |
Layer.ChannelInformation / LayerMaskData / LayerBlendingRangesData | Metadati di canale/maschera/blending in sola lettura |