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.Layers por posição; a ordem do array corresponde à ordem das camadas do próprio documento.
  • BlendModeKey aceita qualquer valor enum de BlendMode — nenhuma validação é feita em relação ao modo de cor declarado no documento.
  • ChannelInformation, LayerMaskData e LayerBlendingRangesData podem ser lidos, mas nunca reassinados.
  • Chame PsdImage.Save() uma vez após todas as edições; cada chamada grava o documento completo.

Problemas Comuns

ProblemaCausaCorreção
NotSupportedException ao definir ChannelInformation, LayerMaskData ou LayerBlendingRangesDataEssas 3 propriedades são somente leitura na compilação FOSS, apesar de possuírem um setterLeia o valor; não tente reatribui-lo
LayerMaskData é null para uma camadaNem toda camada tem uma subseção de máscaraVerifique 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étodoDescrição
PsdImage.LayersObté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 / RightEdições de metadados de camada suportadas
Layer.Bounds / Width / Height / ChannelsCountGeometria de camada somente leitura
Layer.ChannelInformation / LayerMaskData / LayerBlendingRangesDataMetadados de canal/máscara/fusão somente leitura

Ver também

 Português