Вступ

PsdImage.Layers повертає кожен шар у документі PSD або PSB як масив Layer. У цьому дописі розглядається саме те, що 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[], що описує ідентифікатор кожного каналу, метод стиснення та довжину в байтах. 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 build
using 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}");
}

Підтримувані формати

ФорматРозширенняЧитатиЗаписати
Документ Photoshoppsd✓✓
Великий документ Photoshoppsb✓✓

Відкритий код та ліцензування

Aspose.PSD FOSS для .NET має ліцензію MIT і може використовуватись у комерційних продуктах без роялті, без водяного знака оцінки чи обмеження використання.

Пакет має версію 1.0.0 і вимагає лише .NET 10.0 під час виконання — інших сторонніх залежностей не має.


Початок роботи

Пов’язані ресурси