Hur man inspekterar PSD-dokumentsektioner i Python

Hur man inspekterar PSD-dokumentsektioner i Python

En laddad PsdImage exponerar skrivskyddade sammanfattningsobjekt för de strukturella sektionerna i ett PSD/PSB-dokument — huvudet, färgdatasektionen, bilddatasektionen och bildresurssektionen — utan att kräva någon manuell byte-nivå-parsing.

Steg-för-steg-guide

Steg 1: Installera paketet

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

Steg 2: Importera erforderliga klasser

from aspose_psd_foss.psdimage import PsdImage

Steg 3: Inspektera huvudsektionen

PsdImage.header returnerar en PsdHeader med dokumentets råa strukturella fält:

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 returnerar det råa heltalsfältet för färgläge som lagras i filen — använd PsdImage.color_mode istället om du behöver den starkt typade ColorModes-enumerationen.


Steg 4: Inspektera färgdatasektionen

PsdImage.color_data_info returnerar en PsdColorDataInfo sammanfattning; kind är ett PsdColorDataKind värde (NONE, INDEXED_PALETTE, RGB_PAYLOAD, CMYK_PAYLOAD eller 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)}")

Steg 5: Inspektera bilddatasektionen

PsdImage.image_data_info returnerar en PsdImageDataInfo sammanfattning som beskriver hur den sammanslagna pixeldata är kodad:

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 är ett ImageDataKind värde (RAW, RLE, ZIP eller UNKNOWN) som beskriver den sammanslagna bilddataens egna kodning — image.compression rapporterar samma kodning via den separata CompressionMethod-enumerationen.


Steg 6: Inspektera bildresurssektionen

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 returnerar skrivskyddad PsdResourceInfo sammanfattningar. Den separata PsdImage.image_resources egenskapen har också en getter, men dess setter kastar NotSupportedException i detta FOSS-bygge — se Troubleshooting för hela listan över skrivskyddade settrare.

Vanliga problem och lösningar

header.color_mode matchar inte image.color_mode. Detta är förväntat — PsdHeader.color_mode är det råa heltalsfältet från filen, medan PsdImage.color_mode är den starkt typade ColorModes enum byggd från den.

color_data_info.indexed_palette is None. Dokumentets färgdatatyp är inte INDEXED_PALETTE — endast indexerade färgdokument har en palett.

Setting image.image_resources raises NotSupportedException. Denna setter stöds inte i denna FOSS-byggnad; behandla image_resources and resources som skrivskyddad.

Vanliga frågor

Kan jag modifiera header-, färgdata- eller bilddatasektionerna direkt?

Nej — PsdHeader, PsdColorDataInfo, ColorData och PsdImageDataInfo är alla skrivskyddade sammanfattningsobjekt i denna FOSS-byggnad. Det finns inga offentliga set-metoder för någon av deras egenskaper.

Vad är skillnaden mellan image.compression och image.image_data_kind?

De beskriver samma underliggande kodning genom två separata uppräkningar: image.compression returnerar ett CompressionMethod-värde, medan image.image_data_info.kind returnerar ett ImageDataKind-värde.

Se även

 Svenska