Jak pracować z warstwami PSD w .NET

Jak pracować z warstwami PSD w .NET

Ten przewodnik pokazuje, jak wyświetlić listę warstw dokumentu, odczytać i zmienić edytowalne metadane warstwy, przemieścić warstwę oraz usunąć warstwę z kolekcji. Właściwość Layers załadowanego PsdImage zwraca jego kolekcję obiektów Layer. Każdy Layer udostępnia edytowalne metadane — nazwę, widoczność, krycie, przycięcie, tryb mieszania i pozycję (krawędzie ograniczeń) — oraz informacje o ogólnych ograniczeniach i kanałach dostępne tylko do odczytu.

Przewodnik krok po kroku

Krok 1: Zainstaluj pakiet

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

Krok 2: Zaimportuj wymagane klasy

Metody rozszerzające LINQ używane później (Where) pochodzą z System.Linq; typy specyficzne dla PSD pochodzą z dwóch przestrzeni nazw Aspose.PSD poniżej.

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

Krok 3: Załaduj dokument i wyświetl listę jego warstw

Załaduj dokument, a następnie iteruj Layers, aby zobaczyć nazwę i geometrię każdej warstwy:

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})");
}

Krok 4: Odczytaj i edytuj widoczność warstwy, przezroczystość i tryb mieszania

IsVisible, Opacity (0-255), Clipping, Name i BlendModeKey wszystkie posiadają działające settery:

var layer = image.Layers[0];

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

Krok 5: Odczytaj i przemieść granice warstwy

Bounds, Width, Height i ChannelsCount są tylko do odczytu — ale Top, Left, Bottom i Right każdy posiada działający setter, który przemieszcza warstwę:

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

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

Krok 6: Zamień kolekcję warstw

PsdImage.Layers sam posiada działający setter, więc możesz zamienić całą kolekcję (na przykład, aby usunąć warstwę):

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

Krok 7: Zapisz dokument

Zapisz wszystkie zmiany wprowadzone w poprzednich krokach na dysku:

image.Save("output.psd");

Typowe problemy i rozwiązania

NotSupportedException przy ustawianiu ChannelInformation, LayerMaskData, lub LayerBlendingRangesData. Te trzy Layer ustawienia nie są obsługiwane w tej wersji FOSS — traktuj je jako tylko do odczytu.

Wartość krycia wygląda nieprawidłowo po jej ustawieniu. Opacity jest byte (0-255), nie ułamek 0.0-1.0 ani procent — layer.Opacity = 200 oznacza w przybliżeniu 78% krycia (200/255).

Zmiany w warstwie nie pojawiają się po zapisaniu. Potwierdź, że modyfikujesz Layer instancję pobraną z image.Layers, i że wywołujesz image.Save po wprowadzeniu edycji.

Najczęściej zadawane pytania

Czy mogę usunąć warstwę z dokumentu?

Tak — PsdImage.Layers ma działający setter, więc możesz przypisać mu przefiltrowaną tablicę, aby usunąć warstwy (zobacz krok 6).

Jakie tryby mieszania są dostępne?

BlendMode zawiera wartości takie jak Normal, Multiply, Screen, Overlay i Darken, między innymi — ustawiane za pomocą Layer.BlendModeKey.

Czy dane maski warstwy są dostępne?

Layer.LayerMaskData ma działający getter, ale jego setter rzuca NotSupportedException w tej wersji FOSS.

Zobacz także

 Polski