Cum să lucrați cu straturile PSD în Python
Acest ghid arată cum să enumeraţi straturile unui document, să citiţi și să modificaţi metadatele editabile ale stratului, să repoziţionaţi un strat și să eliminaţi un strat din colecție. Proprietatea layers a unui PsdImage încărcat returnează colecţia sa de obiecte Layer. Fiecare Layer expune metadatele editabile — nume, vizibilitate, opacitate, decupare, mod de amestecare și poziție (margini ale limitelor) — plus informații read-only despre limitele globale și canale.
Ghid pas cu pas
Pasul 1: Instalaţi pachetul
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:$PYTHONPATHPasul 2: Importaţi clasele necesare
PsdImage încarcă documentul; BlendMode este utilizat mai târziu pentru a seta modul de amestecare al unui strat:
from aspose_psd_foss.psdimage import PsdImage
from aspose_psd_foss.layers.blendmode import BlendModePasul 3: Încarcă un document și listează straturile sale
Încarcă documentul, apoi iterează layers pentru a vedea numele și geometria fiecărui strat:
image = PsdImage.load("input.psd")
for layer in image.layers:
print(f"{layer.name}: {layer.width}x{layer.height} at ({layer.left},{layer.top})")Pasul 4: Citește și editează vizibilitatea, opacitatea și modul de amestecare al stratului
is_visible, opacity (convențional 0-255), clipping, name și blend_mode_key au toate settere funcționale:
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"Pasul 5: Citește și repoziționează limitele stratului
bounds, width, height și channels_count sunt doar pentru citire — dar top, left, bottom și right fiecare are un setter funcțional care repoziționează stratul:
print(f"Bounds: {layer.bounds}")
print(f"Channels: {layer.channels_count}")
layer.left = 10
layer.top = 20
layer.right = 40
layer.bottom = 60Pasul 6: Înlocuiește colecția de straturi
PsdImage.layers în sine are un setter funcțional, astfel poți înlocui întreaga colecție (de exemplu, pentru a elimina un strat):
image.layers = [l for l in image.layers if l.name != "Renamed Layer"]Pasul 7: Salvează documentul
Păstrează fiecare modificare făcută în pașii anteriori pe disc, apoi eliberează resursele imaginii:
image.save("output.psd")
image.dispose()Probleme comune și remedii
NotSupportedException când se setează channel_information, layer_mask_data, sau layer_blending_ranges_data. Aceste trei Layer setters nu sunt suportate în această construcție FOSS — tratează-le ca read-only.
Valoarea opacității pare incorectă după setare. opacity este în mod convențional o valoare 0-255, nu o fracție 0.0-1.0 sau un procentaj — layer.opacity = 200 înseamnă aproximativ 78% opac (200/255).
Modificările unui strat nu apar după salvare. Confirmă că modifici Layer instanță obținută de la image.layers, și că apelezi image.save() după ce ai făcut modificările.
Întrebări frecvente
Pot să elimin un strat dintr-un document?
Da — PsdImage.layers are un setter funcțional, astfel încât poți să îi atribui o listă filtrată pentru a elimina straturile (vezi Pasul 6).
Ce moduri de amestecare sunt disponibile?
BlendMode include valori precum NORMAL, MULTIPLY, SCREEN, OVERLAY și DARKEN, printre altele — setate prin Layer.blend_mode_key.
Datele măștii de strat sunt disponibile?
Layer.layer_mask_data are un getter funcțional, dar setter-ul său generează NotSupportedException în această versiune FOSS.