Layers
Layers
PsdImage.Layers מחזיר כל שכבה שפורסה כמערך Layer. כל Layer חושף את הגאומטריה שלו, את הנראות ואת מצב ההרכבה, וכן metadata על הערוצים, המסכה וטווחי המיזוג.
קריאת מטא-נתוני שכבה
ניתן לקרוא ישירות את Name, Bounds (וWidth/Height/Top/Left/Bottom/Right הנגזרים), IsVisible, Opacity, Clipping, BlendModeKey, ו-ChannelsCount.
foreach (Layer layer in image.Layers)
{
Console.WriteLine($"{layer.Name}: {layer.Bounds}, " +
$"Visible={layer.IsVisible}, Opacity={layer.Opacity}, " +
$"BlendMode={layer.BlendModeKey}");
}עריכות מטא-נתונים נתמכות
Name, IsVisible, Opacity, Clipping, BlendModeKey, והקצוות הארבעה של הגבולות (Top/Left/Bottom/Right) ניתנים לשינוי במקום וכתיבה חזרה עם PsdImage.Save().
Layer layer = image.Layers[0];
layer.Name = $"{layer.Name} (edited)";
layer.IsVisible = !layer.IsVisible;
layer.Opacity = 128;
layer.BlendModeKey = BlendMode.Multiply;
image.Save(outputPath);מטא-נתוני ערוץ ומסכה
ChannelInformation, LayerMaskData ו-LayerBlendingRangesData הם קריאה בלבד בבנייה הזו של FOSS — המגדירים שלהם זורקים NotSupportedException.
foreach (ChannelInformation channel in layer.ChannelInformation)
{
Console.WriteLine($"Channel {channel.ChannelID}: {channel.CompressionMethod}, {channel.Length} bytes");
}
if (layer.LayerMaskData is { } mask)
{
Console.WriteLine($"Mask bounds: {mask.MaskRectangle}, flags: {mask.Flags}");
}הסרת או שינוי סדר השכבות
PsdImage.Layers כולל גם setter וגם getter: הקצאת מערך מסונן או מסודר מחדש מחליפה את אוסף השכבות של המסמך. אין דרך ציבורית ליצור מופע Layer חדש לחלוטין, ולכן זה תומך רק בהסרת או שינוי סדר של שכבות שכבר קיימות — ולא בהוספת שכבה מאפס.
// Keep only visible layers
image.Layers = image.Layers.Where(layer => layer.IsVisible).ToArray();
image.Save(outputPath);טיפים ושיטות מומלצות
- השתמש באינדקס ב-
image.Layersלפי מיקום; סדר המערך תואם את סדר השכבות של המסמך עצמו. BlendModeKeyמקבל כל ערך של enumBlendMode— אין בדיקת תקפות מול מצב הצבע שהוגדר במסמך.ChannelInformation,LayerMaskDataו-LayerBlendingRangesDataניתנים לקריאה אך אף פעם לא ניתן לשנותם.- הפעל את
PsdImage.Save()פעם אחת לאחר כל העריכות; כל קריאה כותבת את המסמך המלא.
בעיות נפוצות
| בעיה | סיבה | תיקון |
|---|---|---|
NotSupportedException בעת הגדרת ChannelInformation, LayerMaskData או LayerBlendingRangesData | שלושת המאפיינים האלה הם קריאה-בלבד בבנייה של FOSS למרות שיש להם setter | קרא את הערך; אל תנסה לשייך לו מחדש |
LayerMaskData הוא null עבור שכבה | לא כל שכבה כוללת תת-חלק של מסכה | בדוק את null לפני השימוש (layer.LayerMaskData is { } mask) |
FAQ
האם אני יכול להסיר שכבה?
כן — הקצה מחדש את image.Layers למערך מסונן. לא ניתן להוסיף שכבה חדשה לחלוטין, מכיוון של-Layer אין בונה ציבורי; ניתן רק לשמור, להסיר או לסדר מחדש שכבות מנותחות קיימות.
האם אני יכול לשנות את ערוץ השכבה או את נתוני המסכה?
לא. ChannelInformation, LayerMaskData ו-LayerBlendingRangesData הם קריאה בלבד — ניתן לשנות רק את Name, IsVisible, Opacity, Clipping, BlendModeKey, ואת קצוות הגבולות.
API Reference סיכום
| מחלקה/מתודה | תיאור |
|---|---|
PsdImage.Layers | מקבל או מגדיר את אוסף השכבות — ניתן להגדרה רק לצורך הסרה/סידור מחדש |
Layer.Name / IsVisible / Opacity / Clipping / BlendModeKey / Top / Left / Bottom / Right | עריכות מטא-נתונים של שכבה נתמכות |
Layer.Bounds / Width / Height / ChannelsCount | גאומטריית שכבה לקריאה בלבד |
Layer.ChannelInformation / LayerMaskData / LayerBlendingRangesData | נתוני ערוץ/מסכה/ערבוב לקריאה בלבד |