Hoe te werken met PSD Layers in .NET

Hoe te werken met PSD Layers in .NET

Deze gids laat zien hoe je de lagen van een document kunt opsommen, bewerkbare laagmetadata kunt lezen en wijzigen, een laag kunt verplaatsen en een laag uit de collectie kunt verwijderen. De Layers-eigenschap van een geladen PsdImage retourneert de collectie van Layer-objecten. Elke Layer biedt bewerkbare metadata — naam, zichtbaarheid, opacity, clipping, blend mode en positie (bounds edges) — plus alleen-lezen algemene grenzen en kanaalinformatie.

Stapsgewijze handleiding

Stap 1: Installeer het pakket

git clone https://github.com/aspose-psd-foss/Aspose.PSD-FOSS-for-.NET.git
cd Aspose.PSD-FOSS-for-.NET
dotnet build

Stap 2: Importeer vereiste klassen

De LINQ-extensiemethoden die later worden gebruikt (Where) komen van System.Linq; de PSD-specifieke types komen van de twee Aspose.PSD namespaces hieronder.

using System.Linq;
using Aspose.PSD.FileFormats.Psd;
using Aspose.PSD.FileFormats.Core.Blending;

Stap 3: Laad een document en lijst de lagen

Laad het document, en doorloop vervolgens Layers om de naam en geometrie van elke laag te zien:

using var image = PsdImage.Load("input.psd");

foreach (var layer in image.Layers)
{
    Console.WriteLine($"{layer.Name}: {layer.Width}x{layer.Height} at ({layer.Left},{layer.Top})");
}

Stap 4: Lees en bewerk laagzichtbaarheid, opaciteit en blend-modus

IsVisible, Opacity (0-255), Clipping, Name en BlendModeKey hebben allemaal werkende setters:

var layer = image.Layers[0];

layer.IsVisible = false;          // hide the layer
layer.Opacity = 200;              // ~78% opacity
layer.BlendModeKey = BlendMode.Multiply;
layer.Name = "Renamed Layer";

Stap 5: Lees en herpositioneer laaggrenzen

Bounds, Width, Height en ChannelsCount zijn alleen-lezen — maar Top, Left, Bottom en Right hebben elk een werkende setter die de laag herpositioneert:

Console.WriteLine($"Bounds: {layer.Bounds}");
Console.WriteLine($"Channels: {layer.ChannelsCount}");

layer.Left = 10;
layer.Top = 20;
layer.Right = 40;
layer.Bottom = 60;

Stap 6: Vervang de lagenverzameling

PsdImage.Layers zelf heeft een werkende setter, zodat je de hele collectie kunt vervangen (bijvoorbeeld om een laag te verwijderen):

image.Layers = image.Layers.Where(l => l.Name != "Renamed Layer").ToArray();

Stap 7: Document opslaan

Sla elke bewerking die in de vorige stappen is gemaakt op naar de schijf:

image.Save("output.psd");

Veelvoorkomende problemen en oplossingen

NotSupportedException bij het instellen ChannelInformation, LayerMaskData, of LayerBlendingRangesData. Deze drie Layer setters worden niet ondersteund in deze FOSS-build — behandel ze als alleen-lezen.

De opaciteitswaarde lijkt onjuist na het instellen ervan. Opacity is een byte (0-255), geen 0.0-1.0-breuk of een percentage — layer.Opacity = 200 betekent ongeveer 78% ondoorzichtig (200/255).

Wijzigingen aan een laag verschijnen niet na het opslaan. Bevestig dat u de Layer instantie verkregen van image.Layers, en dat u image.Save aanroept na het maken van uw bewerkingen.

Veelgestelde vragen

Kan ik een laag uit een document verwijderen?

Ja — PsdImage.Layers heeft een werkende setter, dus je kunt er een gefilterde array aan toewijzen om lagen te verwijderen (zie Stap 6).

Welke mengmodi zijn beschikbaar?

BlendMode bevat waarden zoals Normal, Multiply, Screen, Overlay en Darken, onder andere — ingesteld via Layer.BlendModeKey.

Is laagmaskergegevens beschikbaar?

Layer.LayerMaskData heeft een werkende getter, maar de setter gooit NotSupportedException in deze FOSS-build.

Zie ook

 Nederlands