Hoe te werken met PSD-afbeeldingsresources in Python

Hoe te werken met PSD-afbeeldingsresources in Python

Een geladen PsdImage exposeert zijn afbeeldingsresourceblokken — metadata-achtige items zoals rasters, hulplijnen en ICC-profielpayloads — via twee alleen-lezen weergaven, plus een aparte samenvatting voor geïndexeerde kleurenpaletten.

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 de vereiste klassen

from aspose_psd_foss.psdimage import PsdImage
from aspose_psd_foss.resources.imageresourceids import ImageResourceIds

Stap 3: Controleer en tel afbeeldingsbronnen

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

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

Stap 4: Lijst resourceblokken via image_resources

PsdImage.image_resources retourneert een PreservedResourceBlock per resource, met de ruwe resource-ID, naam en bytegrootte:

for block in image.image_resources:
    print(f"ID: {block.id}, name: {block.name!r}, size: {block.size} bytes")

Herken een specifieke resource door block.id te vergelijken met de bekende constanten in ImageResourceIds:

for block in image.image_resources:
    if block.id == ImageResourceIds.ICC_PROFILE:
        print(f"Found an ICC profile resource ({block.data_size} bytes)")

De resource-parser van deze FOSS-build decodeert resource-ID’s niet naar semantische eigenschappen — het zelf vergelijken van block.id met ImageResourceIds is de ondersteunde manier om een specifieke resource te herkennen.


Stap 5: Lijst resourcesamenvattingen via resources

PsdImage.resources retourneert een aparte PsdResourceInfo samenvatting per resource, inclusief een kind classificatie:

for info in image.resources:
    print(f"ID: {info.resource_id}, kind: {info.kind}, data length: {info.data_length}")

In deze FOSS-build is kind altijd PsdResourceKind.UNKNOWN — semantische classificatie van specifieke resource-soorten (globale hoek, ICC-profiel) is niet geïmplementeerd, dus beschouw kind alleen als informatief en vertrouw op resource_id (Stap 4) om een specifieke resource te herkennen.


Stap 6: Lees een geïndexeerd kleurenpalet

Als de kleurgegevens van het document paletgebaseerd zijn, retourneert PsdImage.indexed_palette de bijbehorende items:

palette = image.indexed_palette

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

Veelvoorkomende problemen en oplossingen

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

Setting image.image_resources raises NotSupportedException. De getter werkt voor het opsommen van resources, maar de setter wordt niet ondersteund in deze FOSS-build.

Calling block.save() op een PreservedResourceBlock raises NotImplementedError. Het direct opslaan van individuele resourceblokken wordt niet ondersteund — resources maken automatisch een round-trip wanneer je aanroept image.save() op het volledige document.

has_icc_profile, is_icc_profile_untagged, en global_angle nooit veranderen. Deze drie PsdImage eigenschappen zijn vaste placeholder-waarden in deze FOSS-build (has_icc_profile is altijd False, is_icc_profile_untagged is altijd None, global_angle is altijd 0) ongeacht de feitelijke inhoud van het geladen document — de resourceparser van deze build reconstructeert geen ID-specifieke semantische waarden. Gebruik Step 4’s block.id vergelijking met ImageResourceIds als je deze bronnen zelf moet detecteren.

Veelgestelde vragen

Wat is het verschil tussen image_resources en resources?

Beiden geven dezelfde onderliggende resource-blokken weer, maar als verschillende objecttypen: image_resources retourneert PreservedResourceBlock objecten (ruwe ID/naam/grootte, gebruikt voor round-tripping), terwijl resources PsdResourceInfo samenvattingen retourneert (voegt een kind classificatie toe, momenteel altijd UNKNOWN).

Kan ik een afbeeldingresource wijzigen of verwijderen?

Nee — setter van image_resources veroorzaakt NotSupportedException, en PreservedResourceBlock.save() veroorzaakt NotImplementedError als deze direct wordt aangeroepen. Resources zijn alleen-lezen in deze FOSS-build.

Zie ook

 Nederlands