Einleitung
PsdImage.layers gibt jede Ebene in einem PSD- oder PSB-Dokument als Liste von Layer-Objekten zurück. Dieser Beitrag betrachtet speziell das, was ein Layer offenlegt: seine Geometrie und den visuellen Zustand, die Aufzählungen für Mischmodus und Masken-Flaggen sowie die Metadatenklassen, die die Kanäle, die Maske und die Mischbereiche einer Ebene beschreiben.
Was enthalten ist
Die Layer-Klasse
Jedes Layer enthält einen Namen (name), ein begrenzendes Rectangle (bounds, mit abgeleiteten width/height/top/left/bottom/right), Sichtbarkeits- und Kompositionszustand (is_visible, opacity, clipping, blend_mode_key) und eine Kanalanzahl (channels_count). name, is_visible, opacity, clipping, blend_mode_key und die vier Begrenzungsränder können alle geändert und mit PsdImage.save() zurückgeschrieben werden.
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}")
Mischmodi und Masken-Flaggen
blend_mode_key ist ein BlendMode-Enum-Wert — die Bibliothek definiert 29 standardmäßige PSD-Mischmodi (NORMAL, MULTIPLY, SCREEN, OVERLAY, DARKEN, LIGHTEN, COLORDODGE, COLORBURN, HARDLIGHT, SOFTLIGHT, DIFFERENCE, EXCLUSION, HUE, SATURATION, COLOR, LUMINOSITY und weitere). Ein separates LayerMaskFlags-Flag-Enum (NONE, RELATIVE_TO_LAYER, DISABLED, INVERTED_WHEN_BLENDING, USER_MASK_FROM_RENDERING_OTHER_DATA, USER_OR_VECTOR_MASKS_HAVE_PARAMETERS) beschreibt das Masken-Renderverhalten, wenn eine Ebene eine hat.
Kanal- und Masken-Metadaten
Layer.channel_information gibt eine Liste von ChannelInformation-Objekten zurück, die die ID, das Kompressionsverfahren und die Byte-Länge jedes Kanals beschreiben. Layer.layer_mask_data (ein LayerMaskDataShort, wenn vorhanden) beschreibt die Begrenzungen und Flags einer Ebenenmaske; Layer.layer_blending_ranges_data stellt die zusammengesetzten und pro Kanal definierten Mischbereiche bereit. Alle drei dieser Eigenschaften sind in diesem FOSS-Build schreibgeschützt — ihre Setter werfen NotSupportedException, wenn sie aufgerufen werden, obwohl sie wie reguläre Eigenschaften erscheinen.
from aspose_psd_foss.psdimage import PsdImage
with PsdImage.load("input.psd") as image:
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}")
Schnellstart
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:$PYTHONPATHfrom aspose_psd_foss.psdimage import PsdImage
with PsdImage.load("input.psd") as image:
visible_layers = [layer for layer in image.layers if layer.is_visible]
for layer in visible_layers:
print(f"{layer.name}: Opacity={layer.opacity}, BlendMode={layer.blend_mode_key}")
Unterstützte Formate
| Format | Erweiterung | Lesen | Schreiben |
|---|---|---|---|
| PSD | psd | ✓ | ✓ |
| PSB | psb | ✓ | ✓ |
Open Source & Lizenzierung
Aspose.PSD FOSS für Python ist unter der MIT-Lizenz verfügbar und darf in kommerziellen Produkten ohne Lizenzgebühren verwendet werden, ohne Evaluierungswasserzeichen oder Nutzungslimit.
Die Bibliothek hat keinerlei native Drittanbieter-Abhängigkeiten — nur die Python-Standardbibliothek wird zur Laufzeit benötigt.