Hoe werk je met PSD-lagen in Python
Deze gids toont hoe je de lagen van een document kunt opsommen, bewerkbare laagmetadata kunt lezen en wijzigen, een laag kunt verplaatsen en een laag uit de collectie kunt verwijderen. De layers eigenschap van een geladen PsdImage retourneert de collectie van Layer objecten. Elke Layer toont bewerkbare metadata — naam, zichtbaarheid, dekking, knippen, mengmodus en positie (randcoördinaten) — plus alleen-lezen algemene grenzen en kanaalinformatie.
Stapsgewijze gids
Stap 1: Installeer het pakket
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:$PYTHONPATHStap 2: Importeer vereiste klassen
PsdImage laadt het document; BlendMode wordt later gebruikt om de mengmodus van een laag in te stellen:
from aspose_psd_foss.psdimage import PsdImage
from aspose_psd_foss.layers.blendmode import BlendModeStap 3: Laad een document en lijst de lagen op
Laad het document, daarna doorloop layers om de naam en geometrie van elke laag te zien:
image = PsdImage.load("input.psd")
for layer in image.layers:
print(f"{layer.name}: {layer.width}x{layer.height} at ({layer.left},{layer.top})")Stap 4: Lees en bewerk laagzichtbaarheid, doorzichtigheid en mengmodus
is_visible, opacity (gewoonlijk 0-255), clipping, name en blend_mode_key hebben allemaal werkende 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"Stap 5: Lees en verplaats laaggrenzen
bounds, width, height en channels_count zijn alleen-lezen — maar top, left, bottom en right hebben elk een werkende setter die de laag verplaatst:
print(f"Bounds: {layer.bounds}")
print(f"Channels: {layer.channels_count}")
layer.left = 10
layer.top = 20
layer.right = 40
layer.bottom = 60Stap 6: Vervang de lagenverzameling
PsdImage.layers zelf heeft een werkende setter, zodat je de hele collectie kunt vervangen (bijvoorbeeld om een laag te verwijderen):
image.layers = [l for l in image.layers if l.name != "Renamed Layer"]Stap 7: Document opslaan
Sla elke bewerking die in de vorige stappen is gemaakt op naar de schijf, en geef vervolgens de bronnen van de afbeelding vrij:
image.save("output.psd")
image.dispose()Veelvoorkomende problemen en oplossingen
NotSupportedException bij het instellen channel_information, layer_mask_data, of layer_blending_ranges_data. Deze drie Layer setters worden niet ondersteund in deze FOSS-build — behandel ze als alleen-lezen.
Opacity-waarde ziet er verkeerd uit na het instellen. opacity is conventioneel een 0-255 waarde, niet een 0.0-1.0 fractie of een percentage — layer.opacity = 200 betekent ongeveer 78% ondoorzichtig (200/255).
Wijzigingen aan een laag verschijnen niet na het opslaan. Bevestig dat je de Layer instance verkregen van image.layers, en dat je aanroept image.save() nadien nadat je je wijzigingen hebt aangebracht.
Veelgestelde vragen
Kan ik een laag uit een document verwijderen?
Ja — PsdImage.layers heeft een werkende setter, dus je kunt er een gefilterde lijst aan toewijzen om lagen te verwijderen (zie Stap 6).
Welke mengmodi zijn beschikbaar?
BlendMode bevat waarden zoals NORMAL, MULTIPLY, SCREEN, OVERLAY en DARKEN, onder andere — ingesteld via Layer.blend_mode_key.
Is laagmaskergegevens beschikbaar?
Layer.layer_mask_data heeft een werkende getter, maar de setter veroorzaakt NotSupportedException in deze FOSS build.