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 מקבל כל ערך של enum BlendMode — אין בדיקת תקפות מול מצב הצבע שהוגדר במסמך.
  • 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נתוני ערוץ/מסכה/ערבוב לקריאה בלבד

ראה גם

 עברית