Wie man PSD-Dokumentabschnitte in Python inspiziert

Wie man PSD-Dokumentabschnitte in Python inspiziert

Ein geladenes PsdImage stellt schreibgeschützte Zusammenfassungsobjekte für die strukturellen Abschnitte eines PSD/PSB-Dokuments bereit — den Header, den Farbdatenabschnitt, den Bilddatenabschnitt und den Bildressourcenabschnitt — ohne dass ein manuelles Byte-Ebene-Parsing erforderlich ist.

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:$PYTHONPATH

Schritt 2: Erforderliche Klassen importieren

from aspose_psd_foss.psdimage import PsdImage

Schritt 3: Header-Abschnitt prüfen

PsdImage.header gibt ein PsdHeader mit den rohen strukturellen Feldern des Dokuments zurück:

image = PsdImage.load("input.psd")

header = image.header
print(f"Size: {header.width}x{header.height}, channels: {header.channels}")
print(f"Bit depth: {header.bit_depth}, raw color mode: {header.color_mode}")
print(f"Is PSB: {header.is_large_document}")

PsdHeader.color_mode gibt das rohe Ganzzahl-Farbmodus-Feld zurück, wie es in der Datei gespeichert ist — verwenden Sie PsdImage.color_mode stattdessen, wenn Sie das stark typisierte ColorModes-Enum benötigen.


Schritt 4: Untersuchen Sie den Farbdatenabschnitt

PsdImage.color_data_info gibt eine PsdColorDataInfo-Zusammenfassung zurück; kind ist ein PsdColorDataKind-Wert (NONE, INDEXED_PALETTE, RGB_PAYLOAD, CMYK_PAYLOAD oder RAW_PRESERVED):

if image.has_color_mode_data:
    color_info = image.color_data_info
    print(f"Color data kind: {color_info.kind}, raw bytes: {color_info.raw_data_length}")

    if color_info.indexed_palette is not None:
        print(f"Indexed palette entries: {len(color_info.indexed_palette.entries)}")

Schritt 5: Untersuchen Sie den Bilddatenabschnitt

PsdImage.image_data_info gibt eine PsdImageDataInfo-Zusammenfassung zurück, die beschreibt, wie die zusammengeführten Pixeldaten kodiert sind:

data_info = image.image_data_info
print(f"Compression: {image.compression}")
print(f"Data kind: {data_info.kind}, uses prediction: {data_info.uses_prediction}")
print(f"Compressed payload length: {data_info.compressed_payload_length}")

data_info.kind ist ein ImageDataKind-Wert (RAW, RLE, ZIP oder UNKNOWN), der die eigene Kodierung der zusammengeführten Bilddaten beschreibt — image.compression meldet dieselbe Kodierung über das separate CompressionMethod-Enum.


Schritt 6: Untersuchen Sie den Bildressourcenabschnitt

print(f"Has image resources: {image.has_image_resources}")
print(f"Resource count: {image.resource_count}")

for resource in image.resources:
    print(f"Resource ID: {resource.resource_id}, kind: {resource.kind}")

PsdImage.resources liefert schreibgeschützt zurück PsdResourceInfo Zusammenfassungen. Der separate PsdImage.image_resources Eigenschaft hat ebenfalls einen Getter, aber ihr Setter wirft NotSupportedException in diesem FOSS-Build — siehe Troubleshooting für die vollständige Liste der schreibgeschützten Setter.

Häufige Probleme und Lösungen

header.color_mode passt nicht image.color_mode. Das ist zu erwarten — PsdHeader.color_mode ist das rohe Integer-Feld aus der Datei, während PsdImage.color_mode ist stark typisiert ColorModes Enum, das daraus erstellt wurde.

color_data_info.indexed_palette is None. Der Farbdatentyp des Dokuments ist nicht INDEXED_PALETTE — Nur indizierte Farbdokumente enthalten eine Palette.

Setting image.image_resources raises NotSupportedException. Dieser Setter wird in dieser FOSS-Version nicht unterstützt; behandeln image_resources and resources als schreibgeschützt.

Häufig gestellte Fragen

Kann ich die Header-, Farbdaten- oder Bilddatenabschnitte direkt ändern?

Nein — PsdHeader, PsdColorDataInfo, ColorData und PsdImageDataInfo sind alle schreibgeschützte Zusammenfassungsobjekte in diesem FOSS-Build. Es gibt keine öffentlichen Setter für irgendeine ihrer Eigenschaften.

Was ist der Unterschied zwischen image.compression und image.image_data_kind?

Sie beschreiben dieselbe zugrunde liegende Kodierung durch zwei separate Enums: image.compression liefert einen CompressionMethod-Wert, während image.image_data_info.kind einen ImageDataKind-Wert liefert.

Siehe auch

 Deutsch