Layers
Layers
PsdImage.layers restituisce ogni livello analizzato come un elenco di oggetti Layer. Ogni Layer espone la propria geometria, visibilità e stato di composizione, nonché 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), is_visible, opacity, clipping, blend_mode_key e channels_count sono tutti leggibili direttamente.
from aspose_psd_foss.psdimage import PsdImage
with PsdImage.load("input.psd") as image:
for layer in image.layers:
print(f"{layer.name}: {layer.bounds}, "
f"Visible={layer.is_visible}, Opacity={layer.opacity}, "
f"BlendMode={layer.blend_mode_key}")Modifiche ai metadati supportate
name, is_visible, opacity, clipping, blend_mode_key e i quattro bordi dei limiti (top/left/bottom/right) possono essere modificati in loco e riscritti con PsdImage.save().
from aspose_psd_foss.psdimage import PsdImage
from aspose_psd_foss.layers.blendmode import BlendMode
with PsdImage.load("input.psd") as image:
layer = image.layers[0]
layer.name = f"{layer.name} (edited)"
layer.is_visible = not layer.is_visible
layer.opacity = 128
layer.blend_mode_key = BlendMode.MULTIPLY
image.save("output.psd")Metadati di canale e maschera
channel_information, layer_mask_data e layer_blending_ranges_data sono di sola lettura in questa build FOSS — i loro setter sollevano NotSupportedException.
layer = image.layers[0]
for channel in layer.channel_information:
print(f"Channel {channel.ChannelID}: {channel.compression_method}, {channel.length} bytes")
if layer.has_mask_data:
mask = layer.layer_mask_data
print(f"Mask bounds: {mask.mask_rectangle}, flags: {mask.flags}")Rimuovere o Riordinare i Livelli
PsdImage.layers ha sia un setter sia un getter: assegnare una lista filtrata o riordinata sostituisce la collezione di livelli del documento.
from aspose_psd_foss.psdimage import PsdImage
with PsdImage.load("input.psd") as image:
image.layers = [layer for layer in image.layers if layer.is_visible]
image.save("output.psd")Consigli e Buone Pratiche
- Indicizza
image.layersper posizione; l’ordine della lista corrisponde all’ordine dei livelli del documento. blend_mode_keyaccetta qualsiasi valore enumBlendMode— non viene eseguita alcuna convalida rispetto alla modalità colore dichiarata del documento.channel_information,layer_mask_dataelayer_blending_ranges_datapossono 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 channel_information, layer_mask_data o layer_blending_ranges_data | Queste 3 proprietà sono di sola lettura nella build FOSS nonostante abbiano un setter | Leggi il valore; non tentare di riassegnarlo |
Accesso layer_mask_data quando non c’è maschera | Non tutti i livelli hanno una sottosezione maschera | Verifica layer.has_mask_data prima di leggere layer.layer_mask_data |
FAQ
Posso rimuovere un livello?
Sì — riassegna image.layers a un elenco filtrato.
Posso modificare i dati del canale o della maschera di un livello?
No. channel_information, layer_mask_data e layer_blending_ranges_data sono di sola lettura — solo name, is_visible, opacity, clipping, blend_mode_key e i bordi dei limiti possono essere modificati.
API Reference Riepilogo
| Classe/Metodo | Descrizione |
|---|---|
PsdImage.layers | Ottiene o imposta la collezione di layer — impostabile per rimozione/riordino |
Layer.name / is_visible / opacity / clipping / blend_mode_key / top / left / bottom / right | Modifiche ai metadati del layer supportate |
Layer.bounds / width / height / channels_count | Geometria del layer a sola lettura |
Layer.channel_information / layer_mask_data / layer_blending_ranges_data | Metadati di canale/maschera/fusione in sola lettura |