Як працювати з шарами 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 збірці.