Come lavorare con i livelli PSD in Python
Questa guida mostra come elencare i livelli di un documento, leggere e modificare i metadati modificabili dei livelli, riposizionare un livello e rimuovere un livello dalla collezione. La proprietà layers di un PsdImage caricato restituisce la sua raccolta di oggetti Layer. Ogni Layer espone metadati modificabili — nome, visibilità, opacità, clipping, blend mode e posizione (bordi dei limiti) — oltre a informazioni in sola lettura sui limiti complessivi e sui canali.
Guida passo-passo
Passo 1: Installa il pacchetto
git clone https://github.com/aspose-psd-foss/Aspose.PSD-FOSS-for-Python.git
cd Aspose.PSD-FOSS-for-Python
# No packaging manifest is published yet -- run from this folder,
# or add it to PYTHONPATH:
export PYTHONPATH=$PWD:$PYTHONPATHPasso 2: Importa le classi necessarie
PsdImage carica il documento; BlendMode viene usato successivamente per impostare la blend mode di un livello:
from aspose_psd_foss.psdimage import PsdImage
from aspose_psd_foss.layers.blendmode import BlendModePasso 3: Carica un documento e elenca i suoi livelli
Carica il documento, quindi itera layers per visualizzare il nome e la geometria di ciascun livello:
image = PsdImage.load("input.psd")
for layer in image.layers:
print(f"{layer.name}: {layer.width}x{layer.height} at ({layer.left},{layer.top})")Passo 4: Leggi e modifica la visibilità, l’opacità e la modalità di fusione del livello
is_visible, opacity (convenzionalmente 0-255), clipping, name e blend_mode_key hanno tutti dei setter funzionanti:
layer = image.layers[0]
layer.is_visible = False # hide the layer
layer.opacity = 200 # ~78% opacity
layer.blend_mode_key = BlendMode.MULTIPLY
layer.name = "Renamed Layer"Passo 5: Leggi e riposiziona i confini del livello
bounds, width, height e channels_count sono solo in lettura — ma top, left, bottom e right hanno ciascuno un setter funzionante che riposiziona il livello:
print(f"Bounds: {layer.bounds}")
print(f"Channels: {layer.channels_count}")
layer.left = 10
layer.top = 20
layer.right = 40
layer.bottom = 60Passo 6: Sostituisci la collezione dei livelli
PsdImage.layers stesso ha un setter funzionante, quindi puoi sostituire l’intera collezione (ad esempio, per rimuovere un livello):
image.layers = [l for l in image.layers if l.name != "Renamed Layer"]Passo 7: Salva il documento
Salva ogni modifica apportata nei passaggi precedenti su disco, quindi rilascia le risorse dell’immagine:
image.save("output.psd")
image.dispose()Problemi comuni e soluzioni
NotSupportedException quando si imposta channel_information, layer_mask_data, o layer_blending_ranges_data. Questi tre Layer i setter non sono supportati in questa build FOSS — trattali come di sola lettura.
Il valore di opacità sembra errato dopo averlo impostato. opacity è convenzionalmente un valore da 0 a 255, non una frazione 0.0-1.0 o una percentuale — layer.opacity = 200 significa circa il 78% di opacità (200/255).
Le modifiche a un livello non appaiono dopo il salvataggio. Conferma di modificare Layer istanza ottenuta da image.layers, e che chiami image.save() dopo aver apportato le tue modifiche.
Domande frequenti
Posso rimuovere un livello da un documento?
Sì — PsdImage.layers dispone di un setter funzionante, quindi puoi assegnargli un elenco filtrato per rimuovere i livelli (vedi Passo 6).
Quali modalità di fusione sono disponibili?
BlendMode include valori come NORMAL, MULTIPLY, SCREEN, OVERLAY e DARKEN, tra gli altri — impostati tramite Layer.blend_mode_key.
I dati della maschera di livello sono disponibili?
Layer.layer_mask_data dispone di un getter funzionante, ma il suo setter genera NotSupportedException in questa build FOSS.