Hur man arbetar med PSD-lager i .NET

Hur man arbetar med PSD-lager i .NET

Denna guide visar hur man listar ett dokuments lager, läser och ändrar redigerbar lagermetadata, flyttar ett lager och tar bort ett lager från samlingen. En laddad PsdImage’s Layers-egenskap returnerar dess samling av Layer-objekt. Varje Layer exponerar redigerbar metadata — namn, synlighet, opacitet, klippning, blandningsläge och position (kantgränser) — samt skrivskyddad totalgräns och kanalinformation.

Steg-för-steg-guide

Steg 1: Installera paketet

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

Steg 2: Importera erforderliga klasser

LINQ-utökningsmetoderna som används senare (Where) kommer från System.Linq; de PSD-specifika typerna kommer från de två Aspose.PSD-namnrymderna nedan.

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

Steg 3: Läs in ett dokument och lista dess lager

Läs in dokumentet, iterera sedan Layers för att se varje lagers namn och geometri:

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

Steg 4: Läs och redigera lagrets synlighet, opacitet och blandningsläge

IsVisible, Opacity (0-255), Clipping, Name och BlendModeKey har alla fungerande setter:

var layer = image.Layers[0];

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

Steg 5: Läs och ompositionera lagergränser

Bounds, Width, Height och ChannelsCount är skrivskyddade — men Top, Left, Bottom och Right har var och en en fungerande setter som ompositionerar lagret:

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

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

Steg 6: Ersätt lagerkollektionen

PsdImage.Layers har en fungerande setter, så du kan ersätta hela samlingen (till exempel för att ta bort ett lager):

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

Steg 7: Spara dokumentet

Spara varje redigering som gjorts i de föregående stegen tillbaka till disk:

image.Save("output.psd");

Vanliga problem och lösningar

NotSupportedException vid inställning ChannelInformation, LayerMaskData, eller LayerBlendingRangesData. Dessa tre Layer setters stöds inte i detta FOSS-bygge — behandla dem som skrivskyddade.

Opacitetsvärdet ser felaktigt ut efter att ha ställt in det. Opacity är en byte (0-255), inte en 0.0-1.0-bråkdel eller en procentandel — layer.Opacity = 200 betyder ungefär 78% ogenomskinligt (200/255).

Ändringar i ett lager visas inte efter att du sparat. Bekräfta att du modifierar Layer instansen som erhålls från image.Layers, och att du anropar image.Save efter att du gjort dina redigeringar.

Vanliga frågor

Kan jag ta bort ett lager från ett dokument?

Ja — PsdImage.Layers har en fungerande setter, så du kan tilldela den en filtrerad array för att ta bort lager (se Steg 6).

Vilka blandningslägen är tillgängliga?

BlendMode inkluderar värden såsom Normal, Multiply, Screen, Overlay och Darken, bland andra — sätts via Layer.BlendModeKey.

Finns lagermaskdata tillgänglig?

Layer.LayerMaskData har en fungerande getter, men dess setter kastar NotSupportedException i denna FOSS-build.

Se även

 Svenska