Come Lavorare con i Livelli PSD in .NET
Questa guida mostra come elencare i livelli di un documento, leggere e modificare i metadati modificabili dei livelli, riposizionare un livello e rimuovere un livello dalla collezione. La proprietà Layers di un PsdImage caricato restituisce la sua collezione di oggetti Layer. Ogni Layer espone metadati modificabili — nome, visibilità, opacità, ritaglio, modalità di fusione e posizione (bordi dei limiti) — oltre a informazioni di limiti complessivi e canale in sola lettura.
Guida passo-passo
Passo 1: Installa il pacchetto
git clone https://github.com/aspose-psd-foss/Aspose.PSD-FOSS-for-.NET.git
cd Aspose.PSD-FOSS-for-.NET
dotnet buildPasso 2: Importa le classi richieste
I metodi di estensione LINQ utilizzati in seguito (Where) provengono da System.Linq; i tipi specifici per PSD provengono dai due namespace Aspose.PSD qui sotto.
using System.Linq;
using Aspose.PSD.FileFormats.Psd;
using Aspose.PSD.FileFormats.Core.Blending;Passo 3: Carica un documento e elenca i suoi livelli
Carica il documento, quindi iterare Layers per vedere il nome e la geometria di ogni livello:
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})");
}Passo 4: Leggi e modifica visibilità, opacità e modalità di fusione del livello
IsVisible, Opacity (0-255), Clipping, Name e BlendModeKey hanno tutti dei setter funzionanti:
var layer = image.Layers[0];
layer.IsVisible = false; // hide the layer
layer.Opacity = 200; // ~78% opacity
layer.BlendModeKey = BlendMode.Multiply;
layer.Name = "Renamed Layer";Passo 5: Leggi e riposiziona i confini del livello
Bounds, Width, Height e ChannelsCount sono di sola lettura — ma Top, Left, Bottom e Right hanno ciascuno un setter funzionante che riposiziona il livello:
Console.WriteLine($"Bounds: {layer.Bounds}");
Console.WriteLine($"Channels: {layer.ChannelsCount}");
layer.Left = 10;
layer.Top = 20;
layer.Right = 40;
layer.Bottom = 60;Passo 6: Sostituisci la collezione dei livelli
PsdImage.Layers stesso ha un setter funzionante, quindi puoi sostituire l’intera collezione (ad esempio, per rimuovere un livello):
image.Layers = image.Layers.Where(l => l.Name != "Renamed Layer").ToArray();Passo 7: Salva il Documento
Salva ogni modifica effettuata nei passaggi precedenti su disco:
image.Save("output.psd");Problemi comuni e soluzioni
NotSupportedException quando si imposta ChannelInformation, LayerMaskData, o LayerBlendingRangesData. Questi tre Layer i settaggi non sono supportati in questa build FOSS — trattali come di sola lettura.
Il valore di opacità sembra errato dopo averlo impostato. Opacity è un byte (0-255), non una frazione 0.0-1.0 o una percentuale — layer.Opacity = 200 significa circa il 78% opaco (200/255).
Le modifiche a un layer non compaiono dopo il salvataggio. Conferma di modificare il Layer istanza ottenuta da image.Layers, e che chiami image.Save dopo aver effettuato le modifiche.
Domande frequenti
Posso rimuovere un livello da un documento?
Sì — PsdImage.Layers ha un setter funzionante, quindi puoi assegnargli un array filtrato per rimuovere i livelli (vedi Passo 6).
Quali modalità di fusione sono disponibili?
BlendMode include valori come Normal, Multiply, Screen, Overlay e Darken, tra gli altri — impostati tramite Layer.BlendModeKey.
I dati della maschera di livello sono disponibili?
Layer.LayerMaskData ha un getter funzionante, ma il suo setter genera NotSupportedException in questa build FOSS.