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 buildKrok 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.