מבוא
Aspose.PSD FOSS עבור Python טוען, בוחן ושומר מסמכי PSD ו-PSB דרך קבוצת מחלקות קטנה. פוסט זה מתבונן בחלקים של API הליבה שהפוסט המקורי לא כיסה לעומק: איך Image ו-PsdImage מקושרים זה לזה, סוגי ערכי הגאומטריה המשמשים בכל הספרייה, ואיך הספרייה מדווחת על שגיאות טעינה ושמירה.
מה נכלל
תמונה ו-PsdImage
Image היא מחלקת בסיס מופשטת מינימלית: היא מגדירה רק load(), אשר בודקת את הקלט ומחזירה תת-מחלקה קונקרטית — עבור קלט PSD/PSB, תת-המחלקה הזו היא PsdImage. פני המסמך המלאים — color_mode, version, layers, compression, bits_per_channel, size ועוד — קיימים ב-PsdImage עצמו, ולא בבסיס Image.
from aspose_psd_foss.image import Image
from aspose_psd_foss.psdimage import PsdImage
with Image.load("input.psd") as image:
assert isinstance(image, PsdImage)
print(f"ColorMode: {image.color_mode}, Version: {image.version}")
print(f"Size: {image.size}, Layers: {image.layer_count}")
סוגי ערכי גאומטריה
Point, Size, Rectangle ו-RectangleF הם סוגי הערכים המשמשים לקואורדינטות והיקפים ב-API — Layer.bounds הוא Rectangle, ו-PsdImage.size הוא Size. Rectangle כולל שיטות גאומטריה אמיתיות: contains(), intersect_rect(), union_rect(), inflate() ו-from_left_top_right_bottom(), בין היתר.
from aspose_psd_foss.rectangle import Rectangle
layer_bounds = image.layers[0].bounds
fully_inside = layer_bounds.contains(Rectangle(0, 0, 10, 10))
overlap = Rectangle.intersect_rect(layer_bounds, Rectangle(0, 0, 100, 100))
print(f"Contains (0,0,10,10): {fully_inside}, overlap: {overlap}")
בלוקים של משאבים וחריגות
PsdImage.image_resources מחזיר את הרשימה המפוענחת של אובייקטי ResourceBlock — כל אחד חושף את id, name, data_size ו-signature. בבנייה זו של קוד פתוח, ניתן לקרוא את image_resources, global_layer_resources, active_layer ו-has_transparency_data אך לא לשנות אותם — לכל אחד יש setter שמרים NotSupportedException אם הוא נקרא, ולכן יש להתייחס אליהם כקריאה בלבד למרות שהם מופיעים כמאפיינים רגילים.
שגיאות טעינה ושמירה מתגלות כשני סוגי חריגה ייעודיים: PsdLoadException כאשר מסמך אינו ניתן לפענוח, ו-PsdSaveException כאשר מסמך אינו ניתן לכתיבה בחזרה.
from aspose_psd_foss.psdimage import PsdImage
from aspose_psd_foss.coreexceptions.psdloadexception import PsdLoadException
try:
with PsdImage.load("input.psd") as image:
for resource in image.image_resources:
print(f"Resource {resource.id}: {resource.name} ({resource.data_size} bytes)")
except PsdLoadException as ex:
print(f"Failed to load input.psd: {ex}")
התחלה מהירה
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:$PYTHONPATHfrom aspose_psd_foss.psdimage import PsdImage
from aspose_psd_foss.coreexceptions.psdloadexception import PsdLoadException
try:
with PsdImage.load("input.psd") as image:
print(f"Size: {image.size}, ColorMode: {image.color_mode}")
print(f"ImageResources: {image.resource_count}")
except PsdLoadException as ex:
print(f"Load failed: {ex}")
פורמטים נתמכים
| פורמט | הרחבה | קריאה | כתיבה |
|---|---|---|---|
| PSD | psd | ✓ | ✓ |
| PSB | psb | ✓ | ✓ |
קוד פתוח & רישוי
Aspose.PSD FOSS עבור Python מורשה ברישיון MIT וניתן להשתמש בו במוצרים מסחריים ללא תמלוגים, ללא סימן מים של הערכה או מגבלת שימוש.
הספרייה אינה מכילה תלותיות מקומיות של צד שלישי — רק ספריית התקן של Python נדרשת בזמן הריצה.