Layers
Layers
PsdImage.layers gibt jede geparste Ebene als Liste von Layer-Objekten zurück. Jede Layer stellt ihre eigene Geometrie, Sichtbarkeit und Kompositionszustand sowie Metadaten über ihre Kanäle, Maske und Mischbereiche bereit.
Lesen von Ebenen-Metadaten
name, bounds (und die abgeleiteten width/height/top/left/bottom/right), is_visible, opacity, clipping, blend_mode_key und channels_count sind alle direkt lesbar.
from aspose_psd_foss.psdimage import PsdImage
with PsdImage.load("input.psd") as image:
for layer in image.layers:
print(f"{layer.name}: {layer.bounds}, "
f"Visible={layer.is_visible}, Opacity={layer.opacity}, "
f"BlendMode={layer.blend_mode_key}")Unterstützte Metadatenbearbeitungen
name, is_visible, opacity, clipping, blend_mode_key und die vier Begrenzungsränder (top/left/bottom/right) können direkt geändert und mit PsdImage.save() wieder zurückgeschrieben werden.
from aspose_psd_foss.psdimage import PsdImage
from aspose_psd_foss.layers.blendmode import BlendMode
with PsdImage.load("input.psd") as image:
layer = image.layers[0]
layer.name = f"{layer.name} (edited)"
layer.is_visible = not layer.is_visible
layer.opacity = 128
layer.blend_mode_key = BlendMode.MULTIPLY
image.save("output.psd")Kanal- und Masken-Metadaten
channel_information, layer_mask_data und layer_blending_ranges_data sind in diesem FOSS-Build schreibgeschützt — ihre Setter werfen NotSupportedException.
layer = image.layers[0]
for channel in layer.channel_information:
print(f"Channel {channel.ChannelID}: {channel.compression_method}, {channel.length} bytes")
if layer.has_mask_data:
mask = layer.layer_mask_data
print(f"Mask bounds: {mask.mask_rectangle}, flags: {mask.flags}")Entfernen oder Neuordnen von Ebenen
PsdImage.layers hat sowohl einen Setter als auch einen Getter: Das Zuweisen einer gefilterten oder neu geordneten Liste ersetzt die Ebenensammlung des Dokuments.
from aspose_psd_foss.psdimage import PsdImage
with PsdImage.load("input.psd") as image:
image.layers = [layer for layer in image.layers if layer.is_visible]
image.save("output.psd")Tipps und bewährte Vorgehensweisen
- Greifen Sie per Index auf
image.layerszu, basierend auf der Position; die Listenreihenfolge entspricht der Ebenenreihenfolge des Dokuments. blend_mode_keyakzeptiert jedenBlendMode-Enum-Wert — es wird keine Validierung gegen den im Dokument deklarierten Farbmodus durchgeführt.channel_information,layer_mask_dataundlayer_blending_ranges_datakönnen gelesen, aber nie neu zugewiesen werden.- Rufen Sie
PsdImage.save()einmal nach allen Änderungen auf; jeder Aufruf schreibt das gesamte Dokument.
Häufige Probleme
| Problem | Ursache | Lösung |
|---|---|---|
NotSupportedException beim Setzen von channel_information, layer_mask_data oder layer_blending_ranges_data | Diese 3 Eigenschaften sind im FOSS-Build schreibgeschützt, obwohl sie einen Setter haben. | Wert auslesen; nicht versuchen, ihn neu zuzuweisen. |
layer_mask_data-Zugriff, wenn keine Maske vorhanden ist | Nicht jede Ebene hat einen Maskenunterabschnitt | Überprüfen Sie layer.has_mask_data bevor Sie layer.layer_mask_data lesen |
FAQ
Kann ich eine Ebene entfernen?
Ja — image.layers einer gefilterten Liste zuweisen.
Kann ich die Kanal- oder Maskendaten einer Ebene ändern?
Nein. channel_information, layer_mask_data und layer_blending_ranges_data sind schreibgeschützt — nur name, is_visible, opacity, clipping, blend_mode_key und die Begrenzungsränder können geändert werden.
API Reference Zusammenfassung
| Klasse/Methode | Beschreibung |
|---|---|
PsdImage.layers | Ruft die Ebenensammlung ab oder legt sie fest — änderbar zum Entfernen/Umordnen |
Layer.name / is_visible / opacity / clipping / blend_mode_key / top / left / bottom / right | Unterstützte Ebenen-Metadatenbearbeitungen |
Layer.bounds / width / height / channels_count | Schreibgeschützte Ebenengeometrie |
Layer.channel_information / layer_mask_data / layer_blending_ranges_data | Schreibgeschützte Kanal/Masken/Blending-Metadaten |