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

Ondersteunde formaten

FormaatExtensieLezenSchrijven
Photoshop-documentpsd✓✓
Photoshop Groot Documentpsb✓✓

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.


Aan de slag

Gerelateerde bronnen