מבוא
PsdImage.layers מחזיר כל שכבה במסמך PSD או PSB כרשימה של עצמים מסוג Layer. פוסט זה מתמקד במיוחד במה ש-Layer חושף: הגיאומטריה והמצב הוויזואלי שלו, מיני מודולי המיזוג ותגי המסכה, והמחלקות המטה-דטה המתארות את ערוצי השכבה, המסכה וטווחי המיזוג.
מה נכלל
מחלקת השכבה
כל Layer נושא שם (name), תיבה תחומית Rectangle (bounds, עם ערכים נגזרים width/height/top/left/bottom/right), מצב נראות וקומפוזיציה (is_visible, opacity, clipping, blend_mode_key), וספירת ערוצים (channels_count). ניתן לשנות ולכתוב חזרה את name, is_visible, opacity, clipping, blend_mode_key, ואת ארבעת קצוות הגבולות באמצעות PsdImage.save().
from aspose_psd_foss.psdimage import PsdImage
with PsdImage.load("input.psd") as image:
for layer in image.layers:
print(f"{layer.name}: {layer.bounds}, "
f"Visible={layer.is_visible}, Opacity={layer.opacity}, "
f"BlendMode={layer.blend_mode_key}")
מצבי מיזוג ותגי מסכה
blend_mode_key הוא ערך enum מסוג BlendMode — הספרייה מגדירה 29 מצבי מיזוג PSD סטנדרטיים (NORMAL, MULTIPLY, SCREEN, OVERLAY, DARKEN, LIGHTEN, COLORDODGE, COLORBURN, HARDLIGHT, SOFTLIGHT, DIFFERENCE, EXCLUSION, HUE, SATURATION, COLOR, LUMINOSITY, ואחרים). enum נפרד של תגים LayerMaskFlags (NONE, RELATIVE_TO_LAYER, DISABLED, INVERTED_WHEN_BLENDING, USER_MASK_FROM_RENDERING_OTHER_DATA, USER_OR_VECTOR_MASKS_HAVE_PARAMETERS) מתאר את התנהגות רינדור המסכה כאשר לשכבה יש אחת.
נתוני ערוץ ומסכה
Layer.channel_information מחזיר רשימה של אובייקטים מסוג ChannelInformation המתארים את מזהה כל ערוץ, שיטת הדחיסה ואורך הבייט. Layer.layer_mask_data (LayerMaskDataShort כאשר קיים) מתאר את גבולות ודגלים של מסכת שכבה; Layer.layer_blending_ranges_data חושף את טווחי המיזוג המשולב ולפי ערוץ. שלושת המאפיינים הללו הם קריאה בלבד בבנייה הזו של FOSS — המגדירים שלהם מזריקים NotSupportedException אם נקראים, למרות שהם מופיעים כמאפיינים רגילים.
from aspose_psd_foss.psdimage import PsdImage
with PsdImage.load("input.psd") as image:
layer = image.layers[0]
for channel in layer.channel_information:
print(f"Channel {channel.ChannelID}: {channel.compression_method}, {channel.length} bytes")
if layer.has_mask_data:
mask = layer.layer_mask_data
print(f"Mask bounds: {mask.mask_rectangle}, flags: {mask.flags}")
התחלה מהירה
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
with PsdImage.load("input.psd") as image:
visible_layers = [layer for layer in image.layers if layer.is_visible]
for layer in visible_layers:
print(f"{layer.name}: Opacity={layer.opacity}, BlendMode={layer.blend_mode_key}")
פורמטים נתמכים
| פורמט | הרחבה | קריאה | כתיבה |
|---|---|---|---|
| PSD | psd | ✓ | ✓ |
| PSB | psb | ✓ | ✓ |
קוד פתוח ורישוי
Aspose.PSD FOSS עבור Python מוגדר תחת רישיון MIT וניתן להשתמש בו במוצרים מסחריים ללא תמלוגים, ללא סימן מים של הערכה או מגבלת שימוש.
לספרייה אין תלותיות נייטיביות של צד שלישי — רק ספריית ה-standard של Python נדרשת בזמן ריצה.