Come Lavorare con i Livelli PSD in .NET

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 build

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

Vedi anche

 Italiano