Hoe PSD-documentsecties te inspecteren in Python

Hoe PSD-documentsecties te inspecteren in Python

Een geladen PsdImage biedt alleen-lees samenvattingsobjecten voor de structurele secties van een PSD/PSB-document — de header, de kleurgegevenssectie, de afbeeldingsgegevenssectie en de afbeeldingsbronnensectie — zonder dat handmatige byte-niveau parsing vereist is.

Stapsgewijze handleiding

Stap 1: Installeer het pakket

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

Stap 2: Importeer vereiste klassen

from aspose_psd_foss.psdimage import PsdImage

Stap 3: Inspecteer de headersectie

PsdImage.header retourneert een PsdHeader met de ruwe structurele velden van het document:

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 retourneert het ruwe gehele kleurmodusveld zoals opgeslagen in het bestand — gebruik PsdImage.color_mode in plaats daarvan als je de sterk getypeerde ColorModes enum nodig hebt.


Stap 4: Inspecteer de kleurgegevenssectie

PsdImage.color_data_info retourneert een PsdColorDataInfo samenvatting; kind is een PsdColorDataKind waarde (NONE, INDEXED_PALETTE, RGB_PAYLOAD, CMYK_PAYLOAD of 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)}")

Stap 5: Inspecteer de afbeeldingsgegevenssectie

PsdImage.image_data_info retourneert een PsdImageDataInfo samenvatting die beschrijft hoe de samengevoegde pixelgegevens zijn gecodeerd:

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 is een ImageDataKind waarde (RAW, RLE, ZIP of UNKNOWN) die de eigen codering van de samengevoegde afbeeldingsgegevens beschrijft — image.compression meldt dezelfde codering via de aparte CompressionMethod enum.


Stap 6: Inspecteer de afbeeldingsbronnensectie

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 geeft alleen-lezen terug PsdResourceInfo samenvattingen. De afzonderlijke PsdImage.image_resources eigenschap heeft ook een getter, maar de setter werpt NotSupportedException in deze FOSS-build — zie Troubleshooting voor de volledige lijst met alleen-lezen setters.

Veelvoorkomende problemen en oplossingen

header.color_mode komt niet overeen image.color_mode. Dit is verwacht — PsdHeader.color_mode is het ruwe gehele getalveld uit het bestand, terwijl PsdImage.color_mode is de sterk getypeerde ColorModes enum gebouwd hieruit.

color_data_info.indexed_palette is None. Het type kleurgegevens van het document is niet INDEXED_PALETTE — alleen geïndexeerde-kleur documenten hebben een palet.

Setting image.image_resources raises NotSupportedException. Deze setter wordt niet ondersteund in deze FOSS-build; beschouw image_resources and resources als alleen-lezen.

Veelgestelde vragen

Kan ik de header-, kleurgegevens- of afbeeldingsgegevenssecties direct aanpassen?

Nee — PsdHeader, PsdColorDataInfo, ColorData en PsdImageDataInfo zijn allemaal alleen-lees samenvattingsobjecten in deze FOSS-build. Er zijn geen openbare setters voor een van hun eigenschappen.

Wat is het verschil tussen image.compression en image.image_data_kind?

Ze beschrijven dezelfde onderliggende codering via twee afzonderlijke enums: image.compression geeft een CompressionMethod-waarde terug, terwijl image.image_data_info.kind een ImageDataKind-waarde retourneert.

Zie ook

 Nederlands