Hogyan ellenőrizze a PSD dokumentum szakaszait a Python környezetben

Hogyan ellenőrizze a PSD dokumentum szakaszait a Python környezetben

A betöltött PsdImage csak olvasható összegző objektumokat tesz elérhetővé a PSD/PSB dokumentum szerkezeti szakaszaihoz — a fejléc, a színadat szakasz, a képadat szakasz és a képernyőforrások szakasz — anélkül, hogy manuális bájtszintű elemzésre lenne szükség.

Lépésről-lépésre útmutató

1. lépés: A csomag telepítése

pip install aspose-psd-foss

2. lépés: A szükséges osztályok importálása

from aspose_psd_foss.psdimage import PsdImage

3. lépés: A fejléc szakasz vizsgálata

PsdImage.header visszaad egy PsdHeader objektumot a dokumentum nyers szerkezeti mezőivel:

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 visszaadja a nyers egészszámú színmód mezőt, ahogy a fájlban tárolva van — használja a PsdImage.color_mode helyette, ha a szigorúan típusos ColorModes enumra van szüksége.


4. lépés: A színadat-szakasz vizsgálata

PsdImage.color_data_info visszaad egy PsdColorDataInfo összefoglalót; kind egy PsdColorDataKind érték (NONE, INDEXED_PALETTE, RGB_PAYLOAD, CMYK_PAYLOAD vagy 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)}")

5. lépés: A képadat-szakasz vizsgálata

PsdImage.image_data_info visszaad egy PsdImageDataInfo összefoglalót, amely leírja, hogyan van kódolva az egyesített pixeladat:

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 egy ImageDataKind érték (RAW, RLE, ZIP vagy UNKNOWN), amely leírja az egyesített képadat saját kódolását — a image.compression ugyanazt a kódolást jelzi a különálló CompressionMethod enumon keresztül.


6. lépés: A képforrás-szakasz vizsgálata

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 csak olvasható értéket ad vissza PsdResourceInfo összefoglalók. A külön PsdImage.image_resources a propertynek is van getter-e, de a setter hibát dob NotSupportedException ebben a FOSS buildben — lásd Troubleshooting a teljes csak olvasható setterek listájáért.

Gyakori problémák és megoldások

header.color_mode nem egyezik image.color_mode. Ez várható — PsdHeader.color_mode a fájlból származó nyers egész mező, míg PsdImage.color_mode az erősen típusos ColorModes enum, amely ebből épül.

color_data_info.indexed_palette is None. A dokumentum színadat típusa nem INDEXED_PALETTE — csak az indexelt színű dokumentumok tartalmaznak palettát.

Setting image.image_resources raises NotSupportedException. Ez a setter nem támogatott ebben a FOSS buildben; tekintsd image_resources and resources írásvédettnek.

Gyakran ismételt kérdések

Módosíthatom közvetlenül a fejlécet, a színadat- vagy a képadat-szakaszokat?

Nem — PsdHeader, PsdColorDataInfo, ColorData és PsdImageDataInfo mind csak olvasható összefoglaló objektumok ebben a FOSS buildben. Egyik tulajdonságukon sincs nyilvános setter.

Mi a különbség a image.compression és a image.image_data_kind között?

Ugyanazt az alap kódolást írják le két külön enumon keresztül: image.compression egy CompressionMethod értéket ad vissza, míg image.image_data_info.kind egy ImageDataKind értéket ad vissza.

Lásd még:

 Magyar