Layers

Layers

PsdImage.Layers هر لایه تجزیه‌شده‌ای را به‌صورت یک آرایه Layer برمی‌گرداند. هر Layer هندسه، قابلیت مشاهده و وضعیت ترکیب خود را و همچنین فراداده‌های مربوط به کانال‌ها، ماسک و blending ranges افشا می‌کند.


خواندن متادیتای لایه

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 یک تنظیم‌کننده و یک دریافت‌کننده دارد: اختصاص یک آرایهٔ فیلترشده یا بازآرایی‌شده مجموعهٔ لایه‌های سند را جایگزین می‌کند. هیچ راه عمومی برای ساخت یک نمونهٔ جدید از 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متادیتای کانال/ماسک/ترکیب فقط‌خواندنی

همچنین ببینید:

 فارسی