Hogyan dolgozzunk PSD kép erőforrásokkal a Python-ban

Hogyan dolgozzunk PSD kép erőforrásokkal a Python-ban

A betöltött PsdImage elérhetővé teszi a képernyőforrás-blokkjait — metaadat-szerű bejegyzéseket, mint például rácsok, segédvonalak és ICC profil adatok — két csak olvasható nézeten keresztül, valamint egy külön összefoglalót az indexelt színpalettákhoz.

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
from aspose_psd_foss.resources.imageresourceids import ImageResourceIds

3. lépés: A képernyőforrások ellenőrzése és számlálása

image = PsdImage.load("input.psd")

print(f"Has image resources: {image.has_image_resources}")
print(f"Resource count: {image.resource_count}")

lépés: Erőforrásblokkok listázása a image_resources segítségével

PsdImage.image_resources egy PreservedResourceBlock-t ad vissza erőforrásonként, a nyers erőforrás-azonosítóval, névvel és bájtmérettel:

for block in image.image_resources:
    print(f"ID: {block.id}, name: {block.name!r}, size: {block.size} bytes")

Ismerjen fel egy konkrét erőforrást úgy, hogy összehasonlítja a block.id-t a ImageResourceIds-ben lévő ismert konstansokkal:

for block in image.image_resources:
    if block.id == ImageResourceIds.ICC_PROFILE:
        print(f"Found an ICC profile resource ({block.data_size} bytes)")

Ennek a FOSS változatnak az erőforrás-elemzője nem dekódolja az erőforrás-azonosítókat szemantikus tulajdonságokká – a block.id összehasonlítása a ImageResourceIds-vel saját kezűleg a támogatott módja egy adott erőforrás felismerésének.


lépés: Erőforrás-összefoglalók listázása a resources segítségével

PsdImage.resources egy külön PsdResourceInfo összefoglalót ad vissza erőforrásonként, amely tartalmaz egy kind osztályozást:

for info in image.resources:
    print(f"ID: {info.resource_id}, kind: {info.kind}, data length: {info.data_length}")

Ebben a FOSS változatban a kind mindig PsdResourceKind.UNKNOWN – a konkrét erőforrásfajták (globális szög, ICC profil) szemantikus osztályozása nincs megvalósítva, ezért a kind-t csak tájékoztató jellegűnek tekintse, és a resource_id (4. lépés) alapján ismerje fel a konkrét erőforrást.


6. lépés: Indexelt színpaletta beolvasása

Ha a dokumentum színadata palettán alapul, a PsdImage.indexed_palette visszaadja annak bejegyzéseit:

palette = image.indexed_palette

if palette is not None:
    print(f"Palette entries: {len(palette.entries)}")

Általános problémák és megoldások

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

Setting image.image_resources raises NotSupportedException. A getter működik az erőforrások listázásához, de a setter nincs támogatva ebben a FOSS buildben.

Calling block.save() egy PreservedResourceBlock raises NotImplementedError. Az egyedi erőforrásblokkok közvetlen mentése nem támogatott — az erőforrások automatikusan round-trip-nek járnak, amikor meghívja image.save() az egész dokumentumon.

has_icc_profile, is_icc_profile_untagged, és global_angle soha nem változnak. Ezek a három PsdImage tulajdonságok rögzített helykitöltő értékek ebben a FOSS kiépítésben (has_icc_profile mindig False, is_icc_profile_untagged mindig None, global_angle mindig 0) függetlenül a betöltött dokumentum tényleges tartalmától — ennek a kiépítésnek az erőforrás-elemzője nem állítja vissza az ID-specifikus szemantikus értékeket. Használd a 4. lépés block.id összehasonlításhoz ImageResourceIds ha magadnak kell felderítened ezeket az erőforrásokat.

Gyakran Ismételt Kérdések

Mi a különbség a image_resources és a resources között?

Mindkettő ugyanazokat az alapvető erőforrásblokkokat listázza, de különböző objektumtípusokként: image_resources PreservedResourceBlock objektumokat ad vissza (nyers ID/név/méret, a körkörös átvitelhez használva), míg resources PsdResourceInfo összefoglalókat ad vissza (hozzáad egy kind osztályozást, jelenleg mindig UNKNOWN).

Módosíthatok vagy eltávolíthatok egy kép erőforrást?

Nem — a image_resources beállítója NotSupportedException-t dob, és a PreservedResourceBlock.save() NotImplementedError-t dob, ha közvetlenül hívják. Az erőforrások csak olvashatóak ebben a FOSS kiadásban.

Lásd még:

 Magyar