چگونه با لایه‌های PSD در .NET کار کنیم

چگونه با لایه‌های 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 را پرتاب می‌کند.

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

 فارسی