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.layers zu, basierend auf der Position; die Listenreihenfolge entspricht der Ebenenreihenfolge des Dokuments.
  • blend_mode_key akzeptiert jeden BlendMode-Enum-Wert — es wird keine Validierung gegen den im Dokument deklarierten Farbmodus durchgeführt.
  • channel_information, layer_mask_data und layer_blending_ranges_data kö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

ProblemUrsacheLösung
NotSupportedException beim Setzen von channel_information, layer_mask_data oder layer_blending_ranges_dataDiese 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 istNicht 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/MethodeBeschreibung
PsdImage.layersRuft die Ebenensammlung ab oder legt sie fest — änderbar zum Entfernen/Umordnen
Layer.name / is_visible / opacity / clipping / blend_mode_key / top / left / bottom / rightUnterstützte Ebenen-Metadatenbearbeitungen
Layer.bounds / width / height / channels_countSchreibgeschützte Ebenengeometrie
Layer.channel_information / layer_mask_data / layer_blending_ranges_dataSchreibgeschützte Kanal/Masken/Blending-Metadaten

Siehe auch

 Deutsch