Come ispezionare le sezioni del documento PSD in Python

Come ispezionare le sezioni del documento PSD in Python

Un PsdImage caricato espone oggetti di riepilogo in sola lettura per le sezioni strutturali di un documento PSD/PSB — l’intestazione, la sezione dei dati colore, la sezione dei dati immagine e la sezione delle risorse immagine — senza richiedere alcuna analisi manuale a livello di byte.

Guida passo-passo

Passaggio 1: Installa il pacchetto

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

Passaggio 2: Importa le classi necessarie

from aspose_psd_foss.psdimage import PsdImage

Passaggio 3: Analizza la sezione dell’intestazione

PsdImage.header restituisce un PsdHeader con i campi strutturali grezzi del documento:

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 restituisce il campo grezzo intero della modalità colore così come memorizzato nel file — usa PsdImage.color_mode invece se ti serve l’enumerazione tipizzata ColorModes.


Passo 4: Ispeziona l’area dati colore

PsdImage.color_data_info restituisce un riepilogo PsdColorDataInfo; kind è un valore PsdColorDataKind (NONE, INDEXED_PALETTE, RGB_PAYLOAD, CMYK_PAYLOAD o 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)}")

Passo 5: Ispeziona l’area dati immagine

PsdImage.image_data_info restituisce un riepilogo PsdImageDataInfo che descrive come i pixel uniti sono codificati:

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 è un valore ImageDataKind (RAW, RLE, ZIP o UNKNOWN) che descrive la codifica propria dei dati immagine uniti — image.compression riporta la stessa codifica tramite l’enumerazione separata CompressionMethod.


Passo 6: Ispeziona la sezione risorse immagine

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 restituisce in sola lettura PsdResourceInfo sintesi. La separata PsdImage.image_resources la proprietà ha anche un getter, ma il suo setter solleva NotSupportedException in questa build FOSS — vedi Troubleshooting per l’elenco completo dei setter in sola lettura.

Problemi comuni e soluzioni

header.color_mode non corrisponde image.color_mode. Questo è previsto — PsdHeader.color_mode è il campo intero grezzo dal file, mentre PsdImage.color_mode è il fortemente tipizzato ColorModes enum costruito da esso.

color_data_info.indexed_palette is None. Il tipo di dati colore del documento non è INDEXED_PALETTE — solo i documenti a colore indicizzato contengono una tavolozza.

Setting image.image_resources raises NotSupportedException. Questo setter non è supportato in questa build FOSS; trattalo image_resources and resources come sola lettura.

Domande frequenti

Posso modificare direttamente le sezioni dell’intestazione, dei dati colore o dei dati immagine?

No — PsdHeader, PsdColorDataInfo, ColorData e PsdImageDataInfo sono tutti oggetti di riepilogo a sola lettura in questa build FOSS. Non esistono setter pubblici per alcuna delle loro proprietà.

Qual è la differenza tra image.compression e image.image_data_kind?

Descrivono la stessa codifica di base tramite due enum separati: image.compression restituisce un valore CompressionMethod, mentre image.image_data_info.kind restituisce un valore ImageDataKind.

Vedi anche

 Italiano