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 є лише для читання у цій FOSS збірці — їх сеттери генерують 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 має як сеттер, так і геттер: присвоєння відфільтрованого або переупорядкованого масиву замінює колекцію шарів документа. Публічного способу створити новий екземпляр Layer немає, тому це підтримує лише видалення або переупорядкування вже існуючих шарів — а не додавання нового з нуля.

// Keep only visible layers
image.Layers = image.Layers.Where(layer => layer.IsVisible).ToArray();
image.Save(outputPath);

Поради та найкращі практики

  • Індексування image.Layers за позицією; порядок масиву відповідає порядку шарів у документі.
  • BlendModeKey приймає будь-яке значення enum BlendMode — перевірка відповідності заявленому колірному режиму документа не виконується.
  • ChannelInformation, LayerMaskData та LayerBlendingRangesData можна лише читати, але ніколи не перепризначати.
  • Викличте PsdImage.Save() один раз після всіх редагувань; кожний виклик записує весь документ.

Типові проблеми

ПроблемаПричинаВиправлення
NotSupportedException під час встановлення ChannelInformation, LayerMaskData або LayerBlendingRangesDataЦі 3 властивості є лише для читання у збірці FOSS, незважаючи на наявність setterПрочитайте значення; не намагайтеся перепризначити його
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Метадані лише для читання каналу/маски/змішування

Дивіться також

 Українська