Come lavorare con i livelli PSD in Python

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:$PYTHONPATH

Passo 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 BlendMode

Passo 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 = 60

Passo 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.

Vedi anche

 Italiano