Cum să inspectați secțiunile documentului PSD în Python
Un PsdImage încărcat expune obiecte de rezumat numai în citire pentru secțiunile structurale ale unui document PSD/PSB — antetul, secțiunea de culori, secțiunea imaginii și secțiunea de resurse ale imaginii — fără a necesita parsare manuală la nivel de octet.
Ghid pas cu pas
Pasul 1: Instalați pachetul
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:$PYTHONPATHPasul 2: Importați clasele necesare
from aspose_psd_foss.psdimage import PsdImagePasul 3: Inspectați secțiunea antetului
PsdImage.header returnează un PsdHeader cu câmpurile structurale brute ale documentului:
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 returnează câmpul brut al modului de culoare ca număr întreg, așa cum este stocat în fișier — folosește PsdImage.color_mode în schimb dacă ai nevoie de enumerarea ColorModes cu tipare stricte.
Pasul 4: Inspectează secțiunea cu date despre culoare
PsdImage.color_data_info returnează un rezumat PsdColorDataInfo; kind este o valoare PsdColorDataKind (NONE, INDEXED_PALETTE, RGB_PAYLOAD, CMYK_PAYLOAD sau 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)}")Pasul 5: Inspectează secțiunea cu datele imaginii
PsdImage.image_data_info returnează un rezumat PsdImageDataInfo care descrie cum sunt codificate datele de pixeli combinate:
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 este o valoare ImageDataKind (RAW, RLE, ZIP sau UNKNOWN) ce descrie codarea proprie a datelor combinate ale imaginii — image.compression raportează aceeași codare prin enumerarea separată CompressionMethod.
Pasul 6: Inspectează secțiunea de resurse ale imaginii
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 returnează doar în citire PsdResourceInfo rezumate. Separat PsdImage.image_resources proprietatea are, de asemenea, un getter, dar setter-ul său ridică NotSupportedException în această construcție FOSS — vezi Troubleshooting pentru lista completă de setter-e doar în citire.
Probleme comune și soluții
header.color_mode nu se potrivește image.color_mode. Acest lucru este de așteptat — PsdHeader.color_mode este câmpul integer brut din fișier, în timp ce PsdImage.color_mode este strict tipizat ColorModes enum construit din el.
color_data_info.indexed_palette is None. Tipul informațiilor de culoare ale documentului nu este INDEXED_PALETTE — doar documentele cu culori indexate conțin o paletă.
Setting image.image_resources raises NotSupportedException. Acest setter nu este suportat în această versiune FOSS; tratați image_resources and resources ca citire.
Întrebări frecvente
Pot modifica direct secțiunile antet, date de culoare sau date de imagine?
Nu — PsdHeader, PsdColorDataInfo, ColorData și PsdImageDataInfo sunt toate obiecte de rezumat numai în citire în această versiune FOSS. Nu există setteri publici pentru niciuna dintre proprietățile lor.
Care este diferența dintre image.compression și image.image_data_kind?
Ele descriu aceeași codare de bază prin două enumerări separate: image.compression returnează o valoare CompressionMethod, în timp ce image.image_data_info.kind returnează o valoare ImageDataKind.