Введение
PsdImage.Layers возвращает каждый слой в документе PSD или PSB в виде массива Layer. В этой статье рассматривается конкретно то, что раскрывает Layer: его геометрия и визуальное состояние, перечисления режимов наложения и флагов маски, а также классы метаданных, описывающие каналы слоя, маску и диапазоны смешивания.
Что включено
Класс слоя
Каждый Layer содержит имя Pascal (Name), ограничивающий Rectangle (Bounds, с производными Width/Height/Top/Left/Bottom/Right), состояние видимости и композиции (IsVisible, Opacity, Clipping, BlendModeKey) и количество каналов (ChannelsCount). Name, IsVisible, Opacity, Clipping, BlendModeKey и четыре границы могут быть изменены и записаны обратно с помощью PsdImage.Save().
using var image = (PsdImage)Image.Load(inputPath);
foreach (Layer layer in image.Layers)
{
Console.WriteLine($"{layer.Name}: {layer.Bounds}, " +
$"Visible={layer.IsVisible}, Opacity={layer.Opacity}, " +
$"BlendMode={layer.BlendModeKey}");
}
Режимы наложения и флаги маски
BlendModeKey — это значение перечисления BlendMode — библиотека определяет все 29 стандартных режимов наложения PSD (Normal, Multiply, Screen, Overlay, Darken, Lighten, ColorDodge, ColorBurn, HardLight, SoftLight, Difference, Exclusion, Hue, Saturation, Color, Luminosity и др.). Отдельное перечисление LayerMaskFlags (None, RelativeToLayer, Disabled, InvertedWhenBlending, UserMaskFromRenderingOtherData, UserOrVectorMasksHaveParameters) описывает поведение отрисовки маски, когда у слоя она есть.
Метаданные каналов и масок
Layer.ChannelInformation возвращает ChannelInformation[], описывающий ID каждого канала, метод сжатия и длину в байтах. Layer.LayerMaskData (абстрактный LayerMaskData, конкретно LayerMaskDataShort, когда присутствует) описывает границы и флаги маски слоя; Layer.LayerBlendingRangesData предоставляет составные и отдельные диапазоны смешивания каналов. Все три этих свойства являются только для чтения в этой FOSS-сборке — их сеттеры бросают NotSupportedException, если их вызвать, хотя они выглядят как обычные свойства get/set.
Layer layer = image.Layers[0];
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}");
}
Быстрый старт
git clone https://github.com/aspose-psd-foss/Aspose.PSD-FOSS-for-.NET.git
cd Aspose.PSD-FOSS-for-.NET
dotnet buildusing Aspose.PSD.FileFormats.Psd;
using Aspose.PSD.FileFormats.Psd.Layers;
using System.Linq;
using var image = (PsdImage)Image.Load("input.psd");
var visibleLayers = image.Layers.Where(layer => layer.IsVisible);
foreach (Layer layer in visibleLayers)
{
Console.WriteLine($"{layer.Name}: Opacity={layer.Opacity}, BlendMode={layer.BlendModeKey}");
}
Поддерживаемые форматы
| Формат | Расширение | Чтение | Запись |
|---|---|---|---|
| Документ Photoshop | psd | ✓ | ✓ |
| Большой документ Photoshop | psb | ✓ | ✓ |
Открытый исходный код и лицензирование
Aspose.PSD FOSS для .NET лицензирован по MIT и может использоваться в коммерческих продуктах без роялти, без водяного знака оценки и без ограничения использования.
Пакет имеет версию 1.0.0 и требует только .NET 10.0 во время выполнения — других сторонних зависимостей нет.