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:$PYTHONPATHPassaggio 2: Importa le classi necessarie
from aspose_psd_foss.psdimage import PsdImagePassaggio 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.