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:$PYTHONPATHStap 2: Importeer vereiste klassen
from aspose_psd_foss.psdimage import PsdImageStap 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.