كيفية العمل مع طبقات PSD في .NET

كيفية العمل مع طبقات 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 يحتوي على مُعيّن يعمل، لذا يمكنك تعيين مصفوفة مُصفّاة له لإزالة الطبقات (انظر الخطوة 6).

ما أوضاع الدمج المتاحة؟

BlendMode يتضمن قيمًا مثل Normal، Multiply، Screen، Overlay، وDarken، من بين أخرى — يتم تعيينها عبر Layer.BlendModeKey.

هل بيانات قناع الطبقة متاحة؟

Layer.LayerMaskData يحتوي على جالب يعمل، لكن المُعيّن الخاص به يُطلق NotSupportedException في هذا البناء المفتوح المصدر.

انظر أيضاً

 العربية