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:$PYTHONPATHSteg 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 BlendModeSteg 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 = 60Steg 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.