כיצד לעבוד עם שכבות PSD ב-Python
מדריך זה מראה כיצד לרשום את שכבות המסמך, לקרוא ולשנות מטא-נתונים של שכבה שניתנת לעריכה, למקם שכבה מחדש, ולהסיר שכבה מהאוסף. המאפיין layers של PsdImage הטעון מחזיר את האוסף של עצמים Layer. כל Layer חושף מטא-נתונים ניתנים לעריכה — שם, נראות, אטימות, חיתוך, מצב מיזוג ומיקום (קצוות הגבולות) — בנוסף למידע קריאה-בלבד על גבולות כלליים והערוצים.
מדריך שלב-אחר-שלב
שלב 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: ייבוא המחלקות הדרושות
PsdImage טוען את המסמך; BlendMode משמש מאוחר יותר כדי להגדיר את מצב המיזוג של שכבה:
from aspose_psd_foss.psdimage import PsdImage
from aspose_psd_foss.layers.blendmode import BlendModeשלב 3: טען מסמך והצג את השכבות שלו
טען את המסמך, ואז חזור על layers כדי לראות את שם וגיאומטריית כל שכבה:
image = PsdImage.load("input.psd")
for layer in image.layers:
print(f"{layer.name}: {layer.width}x{layer.height} at ({layer.left},{layer.top})")שלב 4: קרא וערוך את נראות השכבה, השקיפות ומצב המיזוג
is_visible, opacity (בדרך כלל 0-255), clipping, name ו-blend_mode_key כולם כוללים setters פעילים:
layer = image.layers[0]
layer.is_visible = False # hide the layer
layer.opacity = 200 # ~78% opacity
layer.blend_mode_key = BlendMode.MULTIPLY
layer.name = "Renamed Layer"שלב 5: קרא והזז מחדש את גבולות השכבה
bounds, width, height ו-channels_count הם קריאה-בלבד — אך ל-top, left, bottom ו-right יש לכל אחד setter פעיל שממקם מחדש את השכבה:
print(f"Bounds: {layer.bounds}")
print(f"Channels: {layer.channels_count}")
layer.left = 10
layer.top = 20
layer.right = 40
layer.bottom = 60שלב 6: החלף את אוסף השכבות
ל-PsdImage.layers עצמו יש setter פעיל, כך שניתן להחליף את כל האוסף (למשל, כדי להסיר שכבה):
image.layers = [l for l in image.layers if l.name != "Renamed Layer"]שלב 7: שמירת המסמך
שמור כל עריכה שנעשתה בשלבים הקודמים לכונן, ולאחר מכן שחרר את משאבי התמונה:
image.save("output.psd")
image.dispose()בעיות נפוצות ותיקונים
NotSupportedException בזמן הגדרה channel_information, layer_mask_data, או layer_blending_ranges_data. שלושת אלה Layer המתאימים אינם נתמכים בבנייה זו של קוד פתוח — יש להתייחס אליהם כקריאה בלבד.
ערך השקיפות נראה שגוי לאחר הגדרתו. opacity הוא בדרך כלל ערך של 0-255, ולא שבר של 0.0-1.0 או אחוז — layer.opacity = 200 מתאר בערך 78% אטימות (200/255).
השינויים בשכבה אינם מופיעים לאחר השמירה. אשר אתה משנה את Layer מופע שהושג מ image.layers, ושאתה קורא ל image.save() לאחר שביצעת את העריכות שלך.
שאלות נפוצות
האם אני יכול להסיר שכבה ממסמך?
כן — PsdImage.layers כולל setter עובד, כך שאתה יכול להקצות לו רשימה מסוננת להסרת שכבות (ראה שלב 6).
אילו מצבי מיזוג זמינים?
BlendMode כולל ערכים כגון NORMAL, MULTIPLY, SCREEN, OVERLAY ו-DARKEN, בין היתר — מוגדר באמצעות Layer.blend_mode_key.
האם נתוני מסיכת שכבה זמינים?
Layer.layer_mask_data כולל getter עובד, אך ה-setter שלו מעלה NotSupportedException בבנייה הזו של FOSS.