Úvod

PsdImage.Layers vrací každou vrstvu v dokumentu PSD nebo PSB jako pole Layer. Tento příspěvek se konkrétně zaměřuje na to, co Layer odhaluje: jeho geometrii a vizuální stav, výčty režimů prolnutí a příznaků masky a třídy metadat, které popisují kanály vrstvy, masku a rozsahy prolnutí.


Co je zahrnuto

Třída vrstvy

Každý Layer má Pascalovo jméno (Name), ohraničující Rectangle (Bounds, s odvozenými Width/Height/Top/Left/Bottom/Right), stav viditelnosti a kompozice (IsVisible, Opacity, Clipping, BlendModeKey) a počet kanálů (ChannelsCount). Name, IsVisible, Opacity, Clipping, BlendModeKey a čtyři okrajové hranice lze všechny změnit a zapsat zpět pomocí 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}");
}

Režimy prolnutí a příznaky masky

BlendModeKey je hodnota výčtu BlendMode — knihovna definuje všechny 29 standardních režimů prolnutí PSD (Normal, Multiply, Screen, Overlay, Darken, Lighten, ColorDodge, ColorBurn, HardLight, SoftLight, Difference, Exclusion, Hue, Saturation, Color, Luminosity a další). Samostatný výčet LayerMaskFlags (None, RelativeToLayer, Disabled, InvertedWhenBlending, UserMaskFromRenderingOtherData, UserOrVectorMasksHaveParameters) popisuje chování renderování masky, pokud vrstva má masku.

Metadata kanálů a masek

Layer.ChannelInformation vrací ChannelInformation[] popisující ID každého kanálu, metodu komprese a délku v bajtech. Layer.LayerMaskData (abstraktní LayerMaskData, konkrétně LayerMaskDataShort, pokud je přítomen) popisuje ohraničení a příznaky masky vrstvy; Layer.LayerBlendingRangesData zpřístupňuje kompozitní a kanálové rozsahy prolínání. Všechny tři tyto vlastnosti jsou v této FOSS sestavě jen pro čtení — jejich settery vyhazují NotSupportedException, pokud jsou zavolány, i když se jeví jako běžné get/set vlastnosti.

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

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

Podporované formáty

FormátPříponaČístZapsat
Dokument Photoshopupsd✓✓
Velký dokument Photoshopupsb✓✓

Open source a licencování

Aspose.PSD FOSS pro .NET je licencováno pod MIT a může být použito v komerčních produktech bez poplatků, bez vodotisku pro hodnocení ani omezení používání.

Balíček je ve verzi 1.0.0 a vyžaduje pouze .NET 10.0 za běhu — nemá žádné další třetí strany závislosti.


Začínáme

Související zdroje