Wprowadzenie
PsdImage.Layers zwraca każdą warstwę w dokumencie PSD lub PSB jako tablicę Layer. Ten wpis przygląda się konkretnie temu, co udostępnia Layer: jego geometrię i stan wizualny, wyliczenia trybu mieszania i flag maski oraz klasy metadanych opisujące kanały warstwy, maskę i zakresy mieszania.
Co zawiera
Klasa warstwy
Każdy Layer posiada nazwę w stylu Pascal (Name), ograniczający Rectangle (Bounds, z pochodnymi Width/Height/Top/Left/Bottom/Right), stan widoczności i kompozycji (IsVisible, Opacity, Clipping, BlendModeKey) oraz liczbę kanałów (ChannelsCount). Name, IsVisible, Opacity, Clipping, BlendModeKey oraz cztery krawędzie granic mogą być zmieniane i zapisywane z powrotem przy użyciu 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}");
}
Tryby mieszania i flagi maski
BlendModeKey jest wartością wyliczenia BlendMode — biblioteka definiuje wszystkie 29 standardowych trybów mieszania PSD (Normal, Multiply, Screen, Overlay, Darken, Lighten, ColorDodge, ColorBurn, HardLight, SoftLight, Difference, Exclusion, Hue, Saturation, Color, Luminosity i inne). Oddzielne wyliczenie LayerMaskFlags (None, RelativeToLayer, Disabled, InvertedWhenBlending, UserMaskFromRenderingOtherData, UserOrVectorMasksHaveParameters) opisuje zachowanie renderowania maski, gdy warstwa ją posiada.
Metadane kanału i maski
Layer.ChannelInformation zwraca ChannelInformation[] opisujący identyfikator każdego kanału, metodę kompresji oraz długość w bajtach. Layer.LayerMaskData (abstrakcyjny LayerMaskData, w praktyce LayerMaskDataShort gdy jest dostępny) opisuje granice i flagi maski warstwy; Layer.LayerBlendingRangesData udostępnia zakresy mieszania łącznie i dla poszczególnych kanałów. Wszystkie trzy te właściwości są tylko do odczytu w tej wersji FOSS — ich settery wyrzucają NotSupportedException, jeśli zostaną wywołane, mimo że wyglądają jak zwykłe właściwości 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}");
}
Szybki start
git clone https://github.com/aspose-psd-foss/Aspose.PSD-FOSS-for-.NET.git
cd Aspose.PSD-FOSS-for-.NET
dotnet buildusing 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}");
}
Obsługiwane formaty
| Format | Rozszerzenie | Odczyt | Zapisz |
|---|---|---|---|
| Dokument Photoshop | psd | ✓ | ✓ |
| Duży dokument Photoshop | psb | ✓ | ✓ |
Open Source i licencjonowanie
Aspose.PSD FOSS dla .NET jest licencjonowany na licencji MIT i może być używany w produktach komercyjnych bez opłat licencyjnych, bez znaku wodnego w wersji ewaluacyjnej ani ograniczeń użytkowania.
Pakiet ma wersję 1.0.0 i wymaga jedynie .NET 10.0 w czasie działania — nie ma innych zależności zewnętrznych.