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 build
using 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

FormatRozszerzenieOdczytZapisz
Dokument Photoshoppsd✓✓
Duży dokument Photoshoppsb✓✓

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.


Rozpoczęcie

Powiązane zasoby