Layers
Layers
PsdImage.Layers retorna cada camada analisada como um array Layer. Cada Layer expõe sua própria geometria, visibilidade e estado de composição, além de metadados sobre seus canais, máscara e intervalos de mesclagem.
Lendo Metadados da Camada
Name, Bounds (e os derivados Width/Height/Top/Left/Bottom/Right), IsVisible, Opacity, Clipping, BlendModeKey e ChannelsCount podem ser lidos diretamente.
foreach (Layer layer in image.Layers)
{
Console.WriteLine($"{layer.Name}: {layer.Bounds}, " +
$"Visible={layer.IsVisible}, Opacity={layer.Opacity}, " +
$"BlendMode={layer.BlendModeKey}");
}Edições de Metadados Suportadas
Name, IsVisible, Opacity, Clipping, BlendModeKey e as quatro bordas de limites (Top/Left/Bottom/Right) podem ser alteradas in situ e gravadas novamente com PsdImage.Save().
Layer layer = image.Layers[0];
layer.Name = $"{layer.Name} (edited)";
layer.IsVisible = !layer.IsVisible;
layer.Opacity = 128;
layer.BlendModeKey = BlendMode.Multiply;
image.Save(outputPath);Metadados de Canal e Máscara
ChannelInformation, LayerMaskData e LayerBlendingRangesData são somente leitura nesta compilação FOSS — seus setters lançam NotSupportedException.
foreach (ChannelInformation channel in layer.ChannelInformation)
{
Console.WriteLine($"Channel {channel.ChannelID}: {channel.CompressionMethod}, {channel.Length} bytes");
}
if (layer.LayerMaskData is { } mask)
{
Console.WriteLine($"Mask bounds: {mask.MaskRectangle}, flags: {mask.Flags}");
}Removendo ou Reordenando Camadas
PsdImage.Layers tem um setter além de um getter: atribuir um array filtrado ou reordenado substitui a coleção de camadas do documento. Não existe forma pública de construir uma nova instância de Layer, portanto isso só suporta remover ou reordenar camadas já presentes — não adicionar uma do zero.
// Keep only visible layers
image.Layers = image.Layers.Where(layer => layer.IsVisible).ToArray();
image.Save(outputPath);Dicas e Melhores Práticas
- Indexe
image.Layerspor posição; a ordem do array corresponde à ordem das camadas do próprio documento. BlendModeKeyaceita qualquer valor enum deBlendMode— nenhuma validação é feita em relação ao modo de cor declarado no documento.ChannelInformation,LayerMaskDataeLayerBlendingRangesDatapodem ser lidos, mas nunca reassinados.- Chame
PsdImage.Save()uma vez após todas as edições; cada chamada grava o documento completo.
Problemas Comuns
| Problema | Causa | Correção |
|---|---|---|
NotSupportedException ao definir ChannelInformation, LayerMaskData ou LayerBlendingRangesData | Essas 3 propriedades são somente leitura na compilação FOSS, apesar de possuírem um setter | Leia o valor; não tente reatribui-lo |
LayerMaskData é null para uma camada | Nem toda camada tem uma subseção de máscara | Verifique null antes de usar (layer.LayerMaskData is { } mask) |
FAQ
Posso remover uma camada?
Sim — reatribua image.Layers para um array filtrado. Você não pode adicionar uma camada nova, pois Layer não possui construtor público; apenas camadas analisadas existentes podem ser mantidas, removidas ou reordenadas.
Posso alterar os dados de canal ou máscara de uma camada?
Não. ChannelInformation, LayerMaskData e LayerBlendingRangesData são somente leitura — apenas Name, IsVisible, Opacity, Clipping, BlendModeKey e as bordas dos limites podem ser alteradas.
API Reference Resumo
| Classe/Método | Descrição |
|---|---|
PsdImage.Layers | Obtém ou define a coleção de camadas — configurável apenas para remoção/reordenação |
Layer.Name / IsVisible / Opacity / Clipping / BlendModeKey / Top / Left / Bottom / Right | Edições de metadados de camada suportadas |
Layer.Bounds / Width / Height / ChannelsCount | Geometria de camada somente leitura |
Layer.ChannelInformation / LayerMaskData / LayerBlendingRangesData | Metadados de canal/máscara/fusão somente leitura |