Ú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 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}");
}
Podporované formáty
| Formát | Přípona | Číst | Zapsat |
|---|---|---|---|
| Dokument Photoshopu | psd | ✓ | ✓ |
| Velký dokument Photoshopu | psb | ✓ | ✓ |
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.