چگونه با لایههای PSD در .NET کار کنیم
این راهنما نشان میدهد چگونه لایههای یک سند را فهرست کنیم، متادیتای ویرایشپذیر لایه را بخوانیم و تغییر دهیم، یک لایه را جابهجا کنیم و لایهای را از مجموعه حذف کنیم. ویژگی Layers یک PsdImage بارگذاریشده، مجموعهٔ اشیای Layer آن را برمیگرداند. هر Layer متادیتای قابل ویرایش — نام، وضعیت نمایش، شفافیت، برش، حالت ترکیب و موقعیت (لبههای مرز) — را ارائه میدهد و علاوه بر آن، مرزهای کلی فقط-خواندنی و اطلاعات کانال را نیز شامل میشود.
راهنمای گامبهگام
مرحله ۱: نصب بسته
git clone https://github.com/aspose-psd-foss/Aspose.PSD-FOSS-for-.NET.git
cd Aspose.PSD-FOSS-for-.NET
dotnet buildمرحله ۲: وارد کردن کلاسهای مورد نیاز
متدهای افزونه LINQ که بعداً استفاده میشوند (Where) از System.Linq میآیند؛ انواع مختص PSD از دو فضاینام Aspose.PSD زیر میآیند.
using System.Linq;
using Aspose.PSD.FileFormats.Psd;
using Aspose.PSD.FileFormats.Core.Blending;مرحله ۳: بارگذاری یک سند و فهرستکردن لایههای آن
سند را بارگذاری کنید، سپس 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})");
}مرحله ۴: خواندن و ویرایش قابلیت نمایش لایه، شفافیت و حالت ترکیب
IsVisible، Opacity (۰-۲۵۵)، Clipping، Name و BlendModeKey همگی تنظیمکنندههای فعال دارند:
var layer = image.Layers[0];
layer.IsVisible = false; // hide the layer
layer.Opacity = 200; // ~78% opacity
layer.BlendModeKey = BlendMode.Multiply;
layer.Name = "Renamed Layer";مرحله ۵: خواندن و جابجایی مرزهای لایه
Bounds، Width، Height و ChannelsCount فقط خواندنی هستند — اما Top، Left، Bottom و Right هرکدام یک تنظیمکننده فعال دارند که لایه را جابجا میکند:
Console.WriteLine($"Bounds: {layer.Bounds}");
Console.WriteLine($"Channels: {layer.ChannelsCount}");
layer.Left = 10;
layer.Top = 20;
layer.Right = 40;
layer.Bottom = 60;مرحله ۶: جایگزینی مجموعه لایهها
PsdImage.Layers خود دارای یک تنظیمکننده فعال است، بنابراین میتوانید کل مجموعه را جایگزین کنید (مثلاً برای حذف یک لایه):
image.Layers = image.Layers.Where(l => l.Name != "Renamed Layer").ToArray();مرحله ۷: ذخیره سند
تمام ویرایشهای انجامشده در مراحل قبلی را روی دیسک ذخیره کنید:
image.Save("output.psd");مشکلات رایج و راهحلها
NotSupportedException در هنگام تنظیم ChannelInformation, LayerMaskData, یا LayerBlendingRangesData. این سه Layer تنظیمکنندهها در این نسخهٔ FOSS پشتیبانی نمیشوند — آنها را بهعنوان فقط-خواندنی در نظر بگیرید.
مقدار شفافیت پس از تنظیم بهنظر نادرست میآید. Opacity یک byte (0-255)، نه یک کسری 0.0-1.0 یا درصد — layer.Opacity = 200 حدوداً 78% مات (200/255) را نشان میدهد.
تغییرات در یک لایه پس از ذخیره ظاهر نمیشوند. تأیید کنید که در حال اصلاح Layer نمونه دریافت شده از image.Layers, و اینکه شما فراخوانی میکنید image.Save پس از اعمال ویرایشهای خود.
سوالات متداول
آیا میتوانم لایهای را از یک سند حذف کنم؟
بله — PsdImage.Layers یک setter کارآمد دارد، بنابراین میتوانید به آن یک آرایه فیلتر شده اختصاص دهید تا لایهها را حذف کنید (به گام ۶ مراجعه کنید).
کدام حالتهای ترکیبی در دسترس هستند؟
BlendMode شامل مقادیر مانند Normal، Multiply، Screen، Overlay و Darken، و دیگر موارد است — از طریق Layer.BlendModeKey تنظیم میشود.
آیا دادههای ماسک لایه در دسترس هستند؟
Layer.LayerMaskData یک getter کارآمد دارد، اما setter آن در این ساختار FOSS NotSupportedException را پرتاب میکند.