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приймає будь-яке значення enumBlendMode— перевірка відповідності заявленому колірному режиму документа не виконується.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 | Метадані лише для читання каналу/маски/змішування |