Wie man mit PSD-Ebenen in Python arbeitet
Dieser Leitfaden zeigt, wie man die Ebenen eines Dokuments auflistet, editierbare Ebenen-Metadaten liest und ändert, eine Ebene neu positioniert und eine Ebene aus der Sammlung entfernt. Die layers-Eigenschaft eines geladenen PsdImage gibt seine Sammlung von Layer-Objekten zurück. Jede Layer stellt editierbare Metadaten bereit — Name, Sichtbarkeit, Deckkraft, Clipping, Mischmodus und Position (Randkanten) — sowie schreibgeschützte Gesamtränder und Kanalinformationen.
Schritt-für-Schritt-Anleitung
Schritt 1: Paket installieren
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:$PYTHONPATHSchritt 2: Erforderliche Klassen importieren
PsdImage lädt das Dokument; BlendMode wird später verwendet, um den Mischmodus einer Ebene festzulegen:
from aspose_psd_foss.psdimage import PsdImage
from aspose_psd_foss.layers.blendmode import BlendModeSchritt 3: Dokument laden und seine Ebenen auflisten
Laden Sie das Dokument und iterieren Sie dann layers, um den Namen und die Geometrie jeder Ebene zu sehen:
image = PsdImage.load("input.psd")
for layer in image.layers:
print(f"{layer.name}: {layer.width}x{layer.height} at ({layer.left},{layer.top})")Schritt 4: Sichtbarkeit, Deckkraft und Mischmodus der Ebene lesen und bearbeiten
is_visible, opacity (üblich 0-255), clipping, name und blend_mode_key verfügen alle über funktionierende Setter:
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"Schritt 5: Ebenengrenzen lesen und neu positionieren
bounds, width, height und channels_count sind schreibgeschützt — jedoch verfügen top, left, bottom und right jeweils über einen funktionierenden Setter, der die Ebene neu positioniert:
print(f"Bounds: {layer.bounds}")
print(f"Channels: {layer.channels_count}")
layer.left = 10
layer.top = 20
layer.right = 40
layer.bottom = 60Schritt 6: Ebenensammlung ersetzen
PsdImage.layers selbst verfügt über einen funktionierenden Setter, sodass Sie die gesamte Sammlung ersetzen können (zum Beispiel, um eine Ebene zu entfernen):
image.layers = [l for l in image.layers if l.name != "Renamed Layer"]Schritt 7: Dokument speichern
Speichere jede in den vorherigen Schritten vorgenommene Bearbeitung auf die Festplatte und gib anschließend die Ressourcen des Bildes frei:
image.save("output.psd")
image.dispose()Häufige Probleme und Lösungen
NotSupportedException beim Einstellen channel_information, layer_mask_data, oder layer_blending_ranges_data. Diese drei Layer Setzer werden in diesem FOSS-Build nicht unterstützt — behandeln Sie sie als read-only.
Der Opacity-Wert sieht nach dem Einstellen falsch aus. opacity ist üblicherweise ein Wert von 0-255, nicht ein Bruch von 0.0-1.0 oder ein Prozentsatz — layer.opacity = 200 bedeutet ungefähr 78% opaque (200/255).
Änderungen an einer Ebene werden nach dem Speichern nicht angezeigt. Bestätigen Sie, dass Sie das Layer Instanz erhalten von image.layers, und dass Sie aufrufen image.save() nachdem Sie Ihre Änderungen vorgenommen haben.
Häufig gestellte Fragen
Kann ich eine Ebene aus einem Dokument entfernen?
Ja — PsdImage.layers hat einen funktionierenden Setter, sodass Sie ihm eine gefilterte Liste zuweisen können, um Ebenen zu entfernen (siehe Schritt 6).
Welche Mischmodi stehen zur Verfügung?
BlendMode enthält Werte wie NORMAL, MULTIPLY, SCREEN, OVERLAY und DARKEN unter anderem — festgelegt über Layer.blend_mode_key.
Sind Ebenenmaskendaten verfügbar?
Layer.layer_mask_data hat einen funktionierenden Getter, aber sein Setter löst NotSupportedException in diesem FOSS-Build aus.