Як працювати з шарами PSD у .NET

Як працювати з шарами PSD у .NET

У цьому посібнику показано, як перелічити шари документа, читати та змінювати редаговані метадані шару, переміщати шар і видаляти шар із колекції. Властивість Layers завантаженого PsdImage повертає його колекцію об’єктів Layer. Кожен Layer надає редаговані метадані — назву, видимість, прозорість, обрізку, режим змішування та позицію (границі) — плюс лише для читання загальні межі та інформацію про канали.

Покроковий посібник

Крок 1: Встановити пакет

git clone https://github.com/aspose-psd-foss/Aspose.PSD-FOSS-for-.NET.git
cd Aspose.PSD-FOSS-for-.NET
dotnet build

Крок 2: Імпорт необхідних класів

Методи-розширення LINQ, що використовуються далі (Where), беруться з System.Linq; типи, специфічні для PSD, беруться з двох просторів імен Aspose.PSD, наведених нижче.

using System.Linq;
using Aspose.PSD.FileFormats.Psd;
using Aspose.PSD.FileFormats.Core.Blending;

Крок 3: Завантажити документ і перелічити його шари

Завантажте документ, а потім ітеруйте Layers, щоб побачити назву та геометрію кожного шару:

using var image = PsdImage.Load("input.psd");

foreach (var layer in image.Layers)
{
    Console.WriteLine($"{layer.Name}: {layer.Width}x{layer.Height} at ({layer.Left},{layer.Top})");
}

Крок 4: Читати та редагувати видимість шару, прозорість та режим змішування

У IsVisible, Opacity (0-255), Clipping, Name та BlendModeKey всі мають працюючі сеттери:

var layer = image.Layers[0];

layer.IsVisible = false;          // hide the layer
layer.Opacity = 200;              // ~78% opacity
layer.BlendModeKey = BlendMode.Multiply;
layer.Name = "Renamed Layer";

Крок 5: Читати та переміщати межі шару

Bounds, Width, Height та ChannelsCount лише для читання — але Top, Left, Bottom та Right кожен має працюючий сеттер, який переміщує шар:

Console.WriteLine($"Bounds: {layer.Bounds}");
Console.WriteLine($"Channels: {layer.ChannelsCount}");

layer.Left = 10;
layer.Top = 20;
layer.Right = 40;
layer.Bottom = 60;

Крок 6: Замінити колекцію шарів

PsdImage.Layers сам має працюючий сеттер, тому ви можете замінити всю колекцію (наприклад, щоб видалити шар):

image.Layers = image.Layers.Where(l => l.Name != "Renamed Layer").ToArray();

Крок 7: Зберегти документ

Збережіть усі внесені зміни в попередніх кроках на диск:

image.Save("output.psd");

Поширені проблеми та виправлення

NotSupportedException при встановленні ChannelInformation, LayerMaskData, або LayerBlendingRangesData. Ці три Layer встановлювачі не підтримуються в цій FOSS-збірці — розглядайте їх як лише для читання.

Значення прозорості виглядає неправильним після його встановлення. Opacity є byte (0-255), а не дробове значення 0.0-1.0 або відсоток — layer.Opacity = 200 означає приблизно 78% непрозорості (200/255).

Зміни у шарі не відображаються після збереження. Переконайтеся, що ви змінюєте Layer екземпляр, отриманий з image.Layers, і що ви викликаєте image.Save після внесення ваших правок.

Поширені запитання

Чи можу я видалити шар з документа?

Так — PsdImage.Layers має працюючий сеттер, тому ви можете призначити йому відфільтрований масив, щоб видалити шари (див. крок 6).

Які режими змішування доступні?

BlendMode включає значення, такі як Normal, Multiply, Screen, Overlay і Darken, серед інших — встановлюються через Layer.BlendModeKey.

Чи доступні дані маски шару?

Layer.LayerMaskData має працюючий геттер, але його сеттер генерує NotSupportedException у цій FOSS збірці.

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

 Українська