Inleiding
PsdImage.Layers retourneert elke laag in een PSD- of PSB-document als een Layer array. Dit artikel kijkt specifiek naar wat een Layer blootlegt: de geometrie en visuele status, de enumeraties voor mengmodus en maskervlaggen, en de metadata-klassen die de kanalen, het masker en de mengbereiken van een laag beschrijven.
Wat er inbegrepen is
De Layer-klasse
Elke Layer heeft een Pascal-naam (Name), een begrenzende Rectangle (Bounds, met afgeleide Width/Height/Top/Left/Bottom/Right), zichtbaarheid- en compositiestatus (IsVisible, Opacity, Clipping, BlendModeKey), en een kanaaltaantal (ChannelsCount). Name, IsVisible, Opacity, Clipping, BlendModeKey, en de vier begrenzingsranden kunnen allemaal worden gewijzigd en teruggeschreven met 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}");
}
Mengmodi en maskervlaggen
BlendModeKey is een BlendMode enum-waarde — de bibliotheek definieert alle 29 standaard PSD-mengmodi (Normal, Multiply, Screen, Overlay, Darken, Lighten, ColorDodge, ColorBurn, HardLight, SoftLight, Difference, Exclusion, Hue, Saturation, Color, Luminosity, en andere). Een aparte LayerMaskFlags enum (None, RelativeToLayer, Disabled, InvertedWhenBlending, UserMaskFromRenderingOtherData, UserOrVectorMasksHaveParameters) beschrijft maskerend gedrag wanneer een laag er een heeft.
Kanaal- en maskermetadata
Layer.ChannelInformation retourneert een ChannelInformation[] die de ID, compressiemethode en byte-lengte van elk kanaal beschrijft. Layer.LayerMaskData (een abstracte LayerMaskData, concreet een LayerMaskDataShort wanneer aanwezig) beschrijft de grenzen en vlaggen van een laagmasker; Layer.LayerBlendingRangesData maakt de samengestelde en per-kanaal mengbereiken beschikbaar. Alle drie deze eigenschappen zijn alleen-lezen in deze FOSS-build — hun setters gooien NotSupportedException als ze worden aangeroepen, ook al verschijnen ze als reguliere get/set-eigenschappen.
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}");
}
Snelstart
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}");
}
Ondersteunde formaten
| Formaat | Extensie | Lezen | Schrijven |
|---|---|---|---|
| Photoshop-document | psd | ✓ | ✓ |
| Photoshop Groot Document | psb | ✓ | ✓ |
Open source & licentiëring
Aspose.PSD FOSS voor .NET is onder de MIT-licentie gelicentieerd en mag worden gebruikt in commerciële producten zonder royalty’s, zonder evaluatiewatermerk of gebruikslimiet.
Het pakket is versie 1.0.0 en vereist alleen .NET 10.0 tijdens uitvoering — het heeft geen andere externe afhankelijkheden.