Hur man arbetar med PSD-lager i Python

Hur man arbetar med PSD-lager i Python

Den här guiden visar hur man listar ett dokuments lager, läser och ändrar redigerbar lagermetadata, flyttar ett lager och tar bort ett lager från samlingen. En inläst PsdImage’s layers-egenskap returnerar dess samling av Layer-objekt. Varje Layer exponerar redigerbar metadata — namn, synlighet, opacitet, beskärning, blandningsläge och position (kantgränser) — samt skrivskyddad totalgräns och kanalinformation.

Steg-för-steg-guide

Steg 1: Installera paketet

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

Steg 2: Importera nödvändiga klasser

PsdImage laddar dokumentet; BlendMode används senare för att sätta ett lagers blandningsläge:

from aspose_psd_foss.psdimage import PsdImage
from aspose_psd_foss.layers.blendmode import BlendMode

Steg 3: Ladda ett dokument och lista dess lager

Ladda dokumentet, iterera sedan layers för att se varje lagers namn och geometri:

image = PsdImage.load("input.psd")

for layer in image.layers:
    print(f"{layer.name}: {layer.width}x{layer.height} at ({layer.left},{layer.top})")

Steg 4: Läs och redigera lagrets synlighet, opacitet och blandningsläge

is_visible, opacity (vanligtvis 0-255), clipping, name och blend_mode_key har alla fungerande setters:

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"

Steg 5: Läs och ompositionera lagrets gränser

bounds, width, height och channels_count är skrivskyddade — men top, left, bottom och right har var och en en fungerande setter som ompositionerar lagret:

print(f"Bounds: {layer.bounds}")
print(f"Channels: {layer.channels_count}")

layer.left = 10
layer.top = 20
layer.right = 40
layer.bottom = 60

Steg 6: Ersätt lagerkollektionen

PsdImage.layers har själv en fungerande setter, så du kan ersätta hela samlingen (till exempel för att ta bort ett lager):

image.layers = [l for l in image.layers if l.name != "Renamed Layer"]

Steg 7: Spara dokumentet

Spara varje redigering som gjorts i föregående steg till disk och släpp sedan bildens resurser:

image.save("output.psd")
image.dispose()

Vanliga problem och lösningar

NotSupportedException vid inställning channel_information, layer_mask_data, eller layer_blending_ranges_data. Dessa tre Layer inställare stöds inte i detta FOSS-build — behandla dem som skrivskyddade.

Opacitetsvärdet ser felaktigt ut efter att ha ställt in det. opacity är konventionellt ett 0-255-värde, inte ett 0,0-1,0-bråk eller en procentsats — layer.opacity = 200 betyder ungefär 78% opak (200/255).

Ändringar i ett lager visas inte efter att ha sparat. Bekräfta att du modifierar Layer instans erhållen från image.layers, och att du anropar image.save() efter att du gjort dina ändringar.

Vanliga frågor och svar

Kan jag ta bort ett lager från ett dokument?

Ja — PsdImage.layers har en fungerande setter, så du kan tilldela den en filtrerad lista för att ta bort lager (se steg 6).

Vilka blandningslägen är tillgängliga?

BlendMode inkluderar värden såsom NORMAL, MULTIPLY, SCREEN, OVERLAY och DARKEN, bland annat — ställs in via Layer.blend_mode_key.

Finns lagermaskdata tillgänglig?

Layer.layer_mask_data har en fungerande getter, men dess setter kastar NotSupportedException i detta FOSS build.

Se även

 Svenska