Cum să lucraţi cu straturile PSD în .NET
Acest ghid arată cum să enumeraţi straturile unui document, să citiţi și să modificaţi metadatele editabile ale stratului, să repoziţionaţi un strat și să eliminaţi un strat din colecție. Proprietatea Layers a unui PsdImage încărcat returnează colecţia sa de obiecte Layer. Fiecare Layer expune metadate editabile — nume, vizibilitate, opacitate, decupare, mod de amestecare și poziție (marginile limitelor) — plus informaţii doar în citire despre limitele generale și canale.
Ghid pas cu pas
Pasul 1: Instalaţi pachetul
git clone https://github.com/aspose-psd-foss/Aspose.PSD-FOSS-for-.NET.git
cd Aspose.PSD-FOSS-for-.NET
dotnet buildPasul 2: Importaţi clasele necesare
Metodele de extensie LINQ utilizate mai târziu (Where) provin din System.Linq; tipurile specifice PSD provin din cele două spații de nume Aspose.PSD de mai jos.
using System.Linq;
using Aspose.PSD.FileFormats.Psd;
using Aspose.PSD.FileFormats.Core.Blending;Pasul 3: Încarcă un document și listează straturile sale
Încarcă documentul, apoi iterează Layers pentru a vedea numele și geometria fiecărui strat:
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})");
}Pasul 4: Citește și editează vizibilitatea stratului, opacitatea și modul de amestecare
IsVisible, Opacity (0-255), Clipping, Name și BlendModeKey au toate settere funcționale:
var layer = image.Layers[0];
layer.IsVisible = false; // hide the layer
layer.Opacity = 200; // ~78% opacity
layer.BlendModeKey = BlendMode.Multiply;
layer.Name = "Renamed Layer";Pasul 5: Citește și repoziționează limitele stratului
Bounds, Width, Height și ChannelsCount sunt doar pentru citire — dar Top, Left, Bottom și Right fiecare au un setter funcțional care repoziționează stratul:
Console.WriteLine($"Bounds: {layer.Bounds}");
Console.WriteLine($"Channels: {layer.ChannelsCount}");
layer.Left = 10;
layer.Top = 20;
layer.Right = 40;
layer.Bottom = 60;Pasul 6: Înlocuiește colecția de straturi
PsdImage.Layers însuși are un setter funcțional, astfel poți înlocui întreaga colecție (de exemplu, pentru a elimina un strat):
image.Layers = image.Layers.Where(l => l.Name != "Renamed Layer").ToArray();Pasul 7: Salvează documentul
Persistă fiecare editare făcută în pașii anteriori pe disc:
image.Save("output.psd");Probleme comune și soluții
NotSupportedException când se setează ChannelInformation, LayerMaskData, sau LayerBlendingRangesData. Aceste trei Layer setterii nu sunt suportaţi în această construcție FOSS — trataţi-i ca fiind numai citire.
Valoarea opacităţii pare incorectă după setare. Opacity este un byte (0-255), nu o fracţiune 0.0-1.0 sau un procentaj — layer.Opacity = 200 înseamnă aproximativ 78% opac (200/255).
Modificările unui strat nu apar după salvare. Confirmați că modificați Layer instanța obținută din image.Layers, și că apelați image.Save după ce ați făcut modificările.
Întrebări frecvente
Pot să elimin un strat dintr-un document?
Da — PsdImage.Layers are un setter funcțional, deci poți să îi atribui un tablou filtrat pentru a elimina straturile (vezi Pasul 6).
Ce moduri de amestecare sunt disponibile?
BlendMode include valori cum ar fi Normal, Multiply, Screen, Overlay și Darken, printre altele — setate prin Layer.BlendModeKey.
Datele de mască de strat sunt disponibile?
Layer.LayerMaskData are un getter funcțional, dar setter-ul său aruncă NotSupportedException în această versiune FOSS.