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بيانات تعريف القناة/القناع/الدمج للقراءة فقط

انظر أيضاً

 العربية