Introduktion

PsdImage.Layers returnerar varje lager i ett PSD- eller PSB-dokument som en Layer-array. Det här inlägget tittar specifikt på vad en Layer avslöjar: dess geometri och visuella tillstånd, blandningsläges- och maskflaggsuppräkningarna, samt metadataklasserna som beskriver ett lagers kanaler, mask och blandningsintervall.


Vad som ingår

Layer-klassen

Varje Layer har ett Pascal-namn (Name), en avgränsande Rectangle (Bounds, med avledda Width/Height/Top/Left/Bottom/Right), synlighet och sammansättningsstatus (IsVisible, Opacity, Clipping, BlendModeKey), och ett kanalantal (ChannelsCount). Name, IsVisible, Opacity, Clipping, BlendModeKey och de fyra gränskanterna kan alla ändras och skrivas tillbaka med 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}");
}

Blandningslägen och maskflaggor

BlendModeKey är ett BlendMode enum-värde — biblioteket definierar alla 29 standard-PSD-blandningslägen (Normal, Multiply, Screen, Overlay, Darken, Lighten, ColorDodge, ColorBurn, HardLight, SoftLight, Difference, Exclusion, Hue, Saturation, Color, Luminosity och andra). En separat LayerMaskFlags enum (None, RelativeToLayer, Disabled, InvertedWhenBlending, UserMaskFromRenderingOtherData, UserOrVectorMasksHaveParameters) beskriver maskrenderingsbeteendet när ett lager har en.

Kanal- och maskmetadata

Layer.ChannelInformation returnerar en ChannelInformation[] som beskriver varje kanals ID, komprimeringsmetod och byte-längd. Layer.LayerMaskData (en abstrakt LayerMaskData, konkret en LayerMaskDataShort när den finns) beskriver en lagermaskens gränser och flaggor; Layer.LayerBlendingRangesData exponerar de sammansatta och per-kanal blandningsintervallen. Alla tre av dessa egenskaper är skrivskyddade i detta FOSS-bygge — deras set-metoder kastar NotSupportedException om de anropas, även om de visas som vanliga get/set-egenskaper.

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

Snabbstart

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

Stödda format

FormatFiländelseLäsSkriv
Photoshop-dokumentpsd✓✓
Photoshop Stort dokumentpsb✓✓

Öppen källkod & licensiering

Aspose.PSD FOSS för .NET är licensierad under MIT och får användas i kommersiella produkter utan royalties, utan någon utvärderingsvattenstämpel eller användningsgräns.

Paketet är i version 1.0.0 och kräver endast .NET 10.0 vid körning — det har inga andra tredjepartsberoenden.


Kom igång

Relaterade resurser