כיצד לעבוד עם שכבות PSD ב-.NET
המדריך הזה מציג כיצד לרשום את השכבות של מסמך, לקרוא ולשנות מטא-דאטה של שכבה שניתן לעריכה, למקם מחדש שכבה, ולהסיר שכבה מהאוסף. המאפיין Layers של PsdImage הטעון מחזיר את האוסף שלו של אובייקטי Layer. כל Layer חושף מטא-דאטה שניתן לעריכה — שם, נראות, שקיפות, חיתוך, מצב מיזוג ומיקום (קצוות גבולות) — בנוסף למידע קריאה בלבד על גבולות כלליים ומידע ערוץ.
מדריך שלב אחר שלב
שלב 1: התקנת החבילה
git clone https://github.com/aspose-psd-foss/Aspose.PSD-FOSS-for-.NET.git
cd Aspose.PSD-FOSS-for-.NET
dotnet buildשלב 2: ייבוא המחלקות הדרושות
המתודות המרחבות של LINQ המשמשות מאוחר יותר (Where) מגיעות מ-System.Linq; הסוגים הספציפיים ל-PSD מגיעים משני מרחבי השם Aspose.PSD שלהלן.
using System.Linq;
using Aspose.PSD.FileFormats.Psd;
using Aspose.PSD.FileFormats.Core.Blending;שלב 3: טען מסמך ורשום את השכבות שלו
טען את המסמך, ואז חזור על Layers כדי לראות את שם וכל גאומטריית של כל שכבה:
using var image = PsdImage.Load("input.psd");
foreach (var layer in image.Layers)
{
Console.WriteLine($"{layer.Name}: {layer.Width}x{layer.Height} at ({layer.Left},{layer.Top})");
}שלב 4: קרא וערוך נראות שכבה, אטימות, ומצב מיזוג
IsVisible, Opacity (0-255), Clipping, Name, ו-BlendModeKey כולם כוללים setters פעילים:
var layer = image.Layers[0];
layer.IsVisible = false; // hide the layer
layer.Opacity = 200; // ~78% opacity
layer.BlendModeKey = BlendMode.Multiply;
layer.Name = "Renamed Layer";שלב 5: קרא והזז גבולות שכבה
Bounds, Width, Height, ו-ChannelsCount הם קריאה בלבד — אבל Top, Left, Bottom, ו-Right לכל אחד יש setter פעיל שמזיז את השכבה:
Console.WriteLine($"Bounds: {layer.Bounds}");
Console.WriteLine($"Channels: {layer.ChannelsCount}");
layer.Left = 10;
layer.Top = 20;
layer.Right = 40;
layer.Bottom = 60;שלב 6: החלף את אוסף השכבות
PsdImage.Layers עצמו כולל setter פעיל, כך שאתה יכול להחליף את האוסף כולו (לדוגמה, כדי להסיר שכבה):
image.Layers = image.Layers.Where(l => l.Name != "Renamed Layer").ToArray();שלב 7: שמירת המסמך
שמרו כל עריכה שנעשתה בשלבים הקודמים חזרה לדיסק:
image.Save("output.psd");בעיות נפוצות ופתרונות
NotSupportedException בעת הגדרה ChannelInformation, LayerMaskData, או LayerBlendingRangesData. שלושת אלה Layer המגדירים אינם נתמכים בבנייה זו של קוד פתוח — התייחס אליהם כקריאה בלבד.
ערך השקיפות נראה שגוי לאחר שהוגדר. Opacity הוא byte (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.BlendModeKey.
האם נתוני מסיכת השכבה זמינים?
Layer.LayerMaskData כולל getter עובד, אך ה-setter שלו זורק NotSupportedException בבנייה הזו של FOSS.