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 buildSteg 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.