Jak prozkoumat sekce PSD dokumentu v Python

Jak prozkoumat sekce PSD dokumentu v Python

Načtený PsdImage poskytuje objekty souhrnu jen pro čtení pro strukturelní sekce PSD/PSB dokumentu — hlavičku, sekci s daty barev, sekci s obrazovými daty a sekci s obrazovými zdroji — aniž by bylo nutné ručně provádět analýzu na úrovni bajtů.

Návod krok po kroku

Krok 1: Nainstalujte balíček

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

Krok 2: Importujte požadované třídy

from aspose_psd_foss.psdimage import PsdImage

Krok 3: Prozkoumejte sekci hlavičky

PsdImage.header vrací PsdHeader s surovými strukturálními poli dokumentu:

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 vrací surové celočíselné pole režimu barvy tak, jak je uloženo v souboru — použijte PsdImage.color_mode místo toho, pokud potřebujete silně typovaný výčet ColorModes enum.


Krok 4: Prozkoumejte sekci dat barev

PsdImage.color_data_info vrací PsdColorDataInfo souhrn; kind je PsdColorDataKind hodnota (NONE, INDEXED_PALETTE, RGB_PAYLOAD, CMYK_PAYLOAD nebo 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)}")

Krok 5: Prozkoumejte sekci dat obrázku

PsdImage.image_data_info vrací PsdImageDataInfo souhrn popisující, jak jsou sloučená data pixelů kódována:

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 je ImageDataKind hodnota (RAW, RLE, ZIP nebo UNKNOWN) popisující vlastní kódování sloučených dat obrázku — image.compression hlásí stejné kódování pomocí samostatného výčtu CompressionMethod enum.


Krok 6: Prozkoumejte sekci zdrojů obrázku

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 vrací pouze pro čtení PsdResourceInfo souhrny. Samostatný PsdImage.image_resources vlastnost také má getter, ale její setter vyvolá NotSupportedException v tomto FOSS buildu — viz Troubleshooting pro úplný seznam read-only setterů.

Časté problémy a opravy

header.color_mode neodpovídá image.color_mode. To je očekávané — PsdHeader.color_mode je surové celočíselné pole ze souboru, zatímco PsdImage.color_mode je silně typovaný ColorModes enum vytvořený z něj.

color_data_info.indexed_palette is None. Typ dat barvy dokumentu není INDEXED_PALETTE — pouze dokumenty s indexovanou barvou obsahují paletu.

Setting image.image_resources raises NotSupportedException. Tento nastavitelný prvek není v této FOSS verzi podporován; považujte image_resources and resources za jen pro čtení.

Často kladené otázky

Mohu přímo upravovat sekce hlavičky, dat barev nebo dat obrazu?

Ne — PsdHeader, PsdColorDataInfo, ColorData a PsdImageDataInfo jsou všechny read-only summary objekty v tomto FOSS build. Neexistují žádné public setters na žádné z jejich vlastností.

Jaký je rozdíl mezi image.compression a image.image_data_kind?

Popisují stejné základní kódování pomocí dvou samostatných výčtů: image.compression vrací hodnotu CompressionMethod, zatímco image.image_data_info.kind vrací hodnotu ImageDataKind.

Viz také:

 Čeština