כיצד לבחון חלקי מסמך PSD ב-Python

כיצד לבחון חלקי מסמך PSD ב-Python

PsdImage טעון מציג אובייקטי סיכום קריאה בלבד עבור החלקים המבניים של מסמך PSD/PSB — הכותרת, חלק נתוני הצבע, חלק נתוני התמונה, וחלק משאבי התמונה — ללא צורך בניתוח ידני ברמת הבייטים.

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

שלב 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

שלב 3: בדיקת חלק הכותרת

PsdImage.header מחזיר PsdHeader עם השדות המבניים הגולמיים של המסמך:

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 מחזיר את שדה מצב הצבע השלם הגולמי כפי שהוא מאוחסן בקובץ — השתמש ב-PsdImage.color_mode במקום אם אתה זקוק ל-enum החזק ColorModes.


שלב 4: בדוק את מדור נתוני הצבע

PsdImage.color_data_info מחזיר סיכום PsdColorDataInfo; kind הוא ערך PsdColorDataKind (NONE, INDEXED_PALETTE, RGB_PAYLOAD, CMYK_PAYLOAD או 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: בדוק את מדור נתוני התמונה

PsdImage.image_data_info מחזיר סיכום PsdImageDataInfo המתאר כיצד מקודדים נתוני הפיקסלים הממוזגים:

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 הוא ערך ImageDataKind (RAW, RLE, ZIP או UNKNOWN) המתאר את הקידוד של נתוני התמונה הממוזגים — image.compression מדווח על אותו קידוד דרך ה-enum הנפרד CompressionMethod.


שלב 6: בדוק את מדור משאבי התמונה

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 מחזיר read-only PsdResourceInfo סיכומים. ה-נפרד PsdImage.image_resources למאפיין יש גם getter, אך ה-setter שלו מעלה NotSupportedException בבנייה זו של FOSS — ראה Troubleshooting לרשימה המלאה של read-only setters.

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

header.color_mode אינו תואם image.color_mode. זה צפוי — PsdHeader.color_mode הוא השדה הגולמי של integer מהקובץ, בעוד PsdImage.color_mode הוא המוגדר בחוזק ColorModes enum שנבנה ממנו.

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

Setting image.image_resources raises NotSupportedException. מגדיר זה אינו נתמך בבנייה זו של FOSS; יש להתייחס image_resources and resources כקריאה בלבד.

שאלות נפוצות

האם אני יכול לשנות ישירות את חלקי הכותרת, נתוני הצבע או נתוני התמונה?

לא — PsdHeader, PsdColorDataInfo, ColorData ו-PsdImageDataInfo הם כולם אובייקטי סיכום לקריאה בלבד בבנייה זו של FOSS. אין setters ציבוריים על אף אחד מהמאפיינים שלהם.

מה ההבדל בין image.compression ל-image.image_data_kind?

הם מתארים את אותה קידוד בסיסית דרך שני enums נפרדים: image.compression מחזיר ערך CompressionMethod, בעוד image.image_data_info.kind מחזיר ערך ImageDataKind.

ראה גם

 עברית