Como trabalhar com camadas PSD em .NET
Este guia mostra como listar as camadas de um documento, ler e alterar os metadados editáveis das camadas, reposicionar uma camada e remover uma camada da coleção. A propriedade Layers de um PsdImage carregado retorna sua coleção de objetos Layer. Cada Layer expõe metadados editáveis — nome, visibilidade, opacidade, recorte, modo de mesclagem e posição (bordas dos limites) — além de limites gerais e informações de canal apenas de leitura.
Guia passo a passo
Passo 1: Instalar o pacote
git clone https://github.com/aspose-psd-foss/Aspose.PSD-FOSS-for-.NET.git
cd Aspose.PSD-FOSS-for-.NET
dotnet buildPasso 2: Importar as classes necessárias
Os métodos de extensão LINQ usados mais adiante (Where) vêm de System.Linq; os tipos específicos de PSD vêm dos dois namespaces Aspose.PSD abaixo.
using System.Linq;
using Aspose.PSD.FileFormats.Psd;
using Aspose.PSD.FileFormats.Core.Blending;Etapa 3: Carregar um Documento e Listar suas Camadas
Carregue o documento, então percorra Layers para ver o nome e a geometria de cada camada:
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})");
}Etapa 4: Ler e Editar Visibilidade da Camada, Opacidade e Modo de Mesclagem
IsVisible, Opacity (0-255), Clipping, Name e BlendModeKey todos têm setters funcionais:
var layer = image.Layers[0];
layer.IsVisible = false; // hide the layer
layer.Opacity = 200; // ~78% opacity
layer.BlendModeKey = BlendMode.Multiply;
layer.Name = "Renamed Layer";Etapa 5: Ler e Reposicionar os Limites da Camada
Bounds, Width, Height e ChannelsCount são somente leitura — mas Top, Left, Bottom e Right cada um tem um setter funcional que reposiciona a camada:
Console.WriteLine($"Bounds: {layer.Bounds}");
Console.WriteLine($"Channels: {layer.ChannelsCount}");
layer.Left = 10;
layer.Top = 20;
layer.Right = 40;
layer.Bottom = 60;Etapa 6: Substituir a Coleção de Camadas
PsdImage.Layers em si tem um setter funcional, portanto você pode substituir toda a coleção (por exemplo, para remover uma camada):
image.Layers = image.Layers.Where(l => l.Name != "Renamed Layer").ToArray();Etapa 7: Salvar o Documento
Persistir todas as edições feitas nas etapas anteriores de volta ao disco:
image.Save("output.psd");Problemas Comuns e Correções
NotSupportedException ao definir ChannelInformation, LayerMaskData, ou LayerBlendingRangesData. Estes três Layer os setters não são suportados nesta compilação FOSS — trate-os como somente leitura.
O valor de opacidade parece errado depois de defini-lo. Opacity é um byte (0-255), não uma fração 0.0-1.0 ou uma porcentagem — layer.Opacity = 200 significa aproximadamente 78% opaco (200/255).
As alterações em uma camada não aparecem após salvar. Confirme que você está modificando o Layer instância obtida de image.Layers, e que você chama image.Save após fazer suas edições.
Perguntas Frequentes
Posso remover uma camada de um documento?
Sim — PsdImage.Layers tem um setter funcional, então você pode atribuir a ele um array filtrado para remover camadas (veja a Etapa 6).
Quais modos de mesclagem estão disponíveis?
BlendMode inclui valores como Normal, Multiply, Screen, Overlay e Darken, entre outros — configurado via Layer.BlendModeKey.
Os dados da máscara de camada estão disponíveis?
Layer.LayerMaskData tem um getter funcional, mas seu setter lança NotSupportedException nesta compilação FOSS.