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-foss2. 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 ImageResourceIds3. 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.