Layers
Layers
PsdImage.Layers تُعيد كل طبقة مُحلَّلة كمصفوفة Layer. كل Layer تكشف عن هندستها الخاصة، رؤيتها وحالة التركيب، والبيانات الوصفية حول قنواتها، القناع، ونطاقات الدمج.
قراءة البيانات الوصفية للطبقة
يمكن قراءة 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 للقراءة فقط في هذا البناء المفتوح المصدر — تُطرح مُحدِّدات القيم الخاصة بهم 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 لديه مُحدِّد قيمة (setter) وكذلك مُسترجِع (getter): تعيين مصفوفة مُفلترة أو مُعاد ترتيبها يستبدل مجموعة طبقات الوثيقة. لا توجد طريقة عامة لإنشاء نسخة Layer جديدة تمامًا، لذا هذا يدعم فقط إزالة أو إعادة ترتيب الطبقات الموجودة — وليس إضافة طبقة من الصفر.
// Keep only visible layers
image.Layers = image.Layers.Where(layer => layer.IsVisible).ToArray();
image.Save(outputPath);نصائح وأفضل الممارسات
- قم بفهرسة
image.Layersحسب الموضع؛ يتطابق ترتيب المصفوفة مع ترتيب طبقات الوثيقة نفسه. BlendModeKeyيقبل أي قيمة تعدادBlendMode— لا يتم إجراء أي تحقق مقابل وضع اللون المعلن في الوثيقة.ChannelInformation،LayerMaskData، وLayerBlendingRangesDataيمكن قراءتها ولكن لا يمكن إعادة تعيينها أبداً.- استدعِ
PsdImage.Save()مرة واحدة بعد جميع التعديلات؛ كل استدعاء يكتب الوثيقة بالكامل.
المشكلات الشائعة
| المشكلة | السبب | الإصلاح |
|---|---|---|
NotSupportedException عند ضبط ChannelInformation، LayerMaskData، أو LayerBlendingRangesData | هذه الخصائص الثلاث هي للقراءة فقط في نسخة FOSS على الرغم من وجود مُعيّن | اقرأ القيمة؛ لا تحاول إعادة تعيينها |
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 | بيانات تعريف القناة/القناع/الدمج للقراءة فقط |