איך לעבוד עם משאבי תמונת PSD ב-Python

איך לעבוד עם משאבי תמונת PSD ב-Python

PsdImage טעון מציג את בלוקי משאבי התמונה שלו — ערכי מטא-דאטה כגון רשתות, קווים מנחים, וטעימות פרופיל ICC — באמצעות שני תצוגות קריאה בלבד, בנוסף לתקציר נפרד עבור ערכות צבע ממוספרות.

מדריך שלב-אחר-שלב

שלב 1: התקנת החבילה

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

שלב 2: ייבוא המחלקות הדרושות

from aspose_psd_foss.psdimage import PsdImage
from aspose_psd_foss.resources.imageresourceids import ImageResourceIds

שלב 3: בדיקה וספירה של משאבי תמונה

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

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

שלב 4: רשום בלוקי משאבים באמצעות image_resources

PsdImage.image_resources מחזיר PreservedResourceBlock לכל משאב, עם מזהה המשאב הגולמי, השם וגודל הבייט:

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

זהה משאב ספציפי על ידי השוואת block.id לקבועים הידועים ב-ImageResourceIds:

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

ה-parser של המשאבים בבנייה זו של FOSS אינו מפענח מזהי משאבים לתכונות סמנטיות בעצמו — השוואת block.id ל-ImageResourceIds בעצמך היא הדרך הנתמכת לזיהוי משאב ספציפי.


שלב 5: רשום סיכומי משאבים באמצעות resources

PsdImage.resources מחזיר סיכום PsdResourceInfo נפרד לכל משאב, כולל סיווג kind:

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

בבנייה זו של FOSS, kind הוא תמיד PsdResourceKind.UNKNOWN — סיווג סמנטי של סוגי משאבים ספציפיים (זווית גלובלית, פרופיל ICC) אינו מיושם, ולכן יש להתייחס ל-kind רק כמידע, ולהסתמך על resource_id (שלב 4) לזיהוי משאב ספציפי.


שלב 6: קרא פלטת צבעים ממוספרת

אם נתוני הצבע של המסמך מבוססים על לוח צבעים, PsdImage.indexed_palette מחזיר את הרשומות שלו:

palette = image.indexed_palette

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

בעיות נפוצות ותיקונים

image.indexed_palette is None. סוג נתוני הצבע של המסמך אינו INDEXED_PALETTE — רק מסמכי צבע ממופה נושאים פלטה.

Setting image.image_resources raises NotSupportedException. ה-getter עובד לרשימת משאבים, אך ה-setter אינו נתמך בבנייה זו של FOSS.

Calling block.save() על PreservedResourceBlock raises NotImplementedError. שמירת בלוקי משאבים בודדים ישירות אינה נתמכת — משאבים עוברים הלוך ושוב אוטומטית כאשר אתה קורא image.save() על כל המסמך.

has_icc_profile, is_icc_profile_untagged, ו global_angle אינם משתנים לעולם. שלושת אלה PsdImage המאפיינים הם ערכי מציין מקום קבועים בבנייה הזו של FOSS (has_icc_profile תמיד False, is_icc_profile_untagged תמיד None, global_angle תמיד 0) ללא קשר לתוכן האמיתי של המסמך הטעון — המפענח המשאבים של בנייה זו אינו משחזר ערכי סמנטיקה ספציפיים למזהה. השתמש ב-שלב4 block.id השוואה ל ImageResourceIds אם אתה צריך לאתר את המשאבים האלה בעצמך.

שאלות נפוצות

מה ההבדל בין image_resources ל-resources?

שניהם מציגים את אותם בלוקי משאבים בסיסיים, אך כסוגי אובייקטים שונים: image_resources מחזיר אובייקטים של PreservedResourceBlock (מזהה/שם/גודל גולמי, משמש ל-round-tripping), בעוד resources מחזיר תקצירי PsdResourceInfo (מוסיף סיווג kind, שכיום תמיד UNKNOWN).

האם אני יכול לשנות או להסיר משאב תמונה?

לא — המגדיר של image_resources מעלה NotSupportedException, ו-PreservedResourceBlock.save() מעלה NotImplementedError אם קוראים לו ישירות. המשאבים הם לקריאה בלבד בגרסה הזו של FOSS.

ראה גם

 עברית