Layers

Layers

PsdImage.layers retorna cada camada analisada como uma lista de objetos 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), is_visible, opacity, clipping, blend_mode_key e channels_count podem ser lidos diretamente.

from aspose_psd_foss.psdimage import PsdImage

with PsdImage.load("input.psd") as image:
    for layer in image.layers:
        print(f"{layer.name}: {layer.bounds}, "
              f"Visible={layer.is_visible}, Opacity={layer.opacity}, "
              f"BlendMode={layer.blend_mode_key}")

Edições de Metadados Suportadas

name, is_visible, opacity, clipping, blend_mode_key e as quatro bordas de limites (top/left/bottom/right) podem ser modificados no local e gravados novamente com PsdImage.save().

from aspose_psd_foss.psdimage import PsdImage
from aspose_psd_foss.layers.blendmode import BlendMode

with PsdImage.load("input.psd") as image:
    layer = image.layers[0]
    layer.name = f"{layer.name} (edited)"
    layer.is_visible = not layer.is_visible
    layer.opacity = 128
    layer.blend_mode_key = BlendMode.MULTIPLY
    image.save("output.psd")

Metadados de Canal e Máscara

channel_information, layer_mask_data e layer_blending_ranges_data são somente leitura nesta compilação FOSS — seus setters levantam NotSupportedException.

layer = image.layers[0]
for channel in layer.channel_information:
    print(f"Channel {channel.ChannelID}: {channel.compression_method}, {channel.length} bytes")

if layer.has_mask_data:
    mask = layer.layer_mask_data
    print(f"Mask bounds: {mask.mask_rectangle}, flags: {mask.flags}")

Removendo ou Reordenando Camadas

PsdImage.layers tem um setter assim como um getter: atribuir uma lista filtrada ou reordenada substitui a coleção de camadas do documento.

from aspose_psd_foss.psdimage import PsdImage

with PsdImage.load("input.psd") as image:
    image.layers = [layer for layer in image.layers if layer.is_visible]
    image.save("output.psd")

Dicas e Melhores Práticas

  • Indexe image.layers por posição; a ordem da lista corresponde à ordem de camadas do próprio documento.
  • blend_mode_key aceita qualquer valor enum BlendMode — não há validação em relação ao modo de cor declarado do documento.
  • channel_information, layer_mask_data e layer_blending_ranges_data podem ser lidos, mas nunca reatribuídos.
  • Chame PsdImage.save() uma vez após todas as edições; cada chamada grava o documento completo.

Problemas Comuns

ProblemaCausaCorreção
NotSupportedException ao definir channel_information, layer_mask_data ou layer_blending_ranges_dataEssas 3 propriedades são somente leitura na compilação FOSS, apesar de possuírem um setterLeia o valor; não tente reatribuí-lo
layer_mask_data acesso quando não há máscaraNem toda camada possui uma subseção de máscaraVerifique layer.has_mask_data antes de ler layer.layer_mask_data

FAQ

Posso remover uma camada?

Sim — reatribua image.layers a uma lista filtrada.

Posso alterar os dados de canal ou máscara de uma camada?

Não. channel_information, layer_mask_data e layer_blending_ranges_data são somente leitura — apenas name, is_visible, opacity, clipping, blend_mode_key e as bordas dos limites podem ser alterados.


API Reference Resumo

Classe/MétodoDescrição
PsdImage.layersObtém ou define a coleção de camadas — configurável para remoção/reordenação
Layer.name / is_visible / opacity / clipping / blend_mode_key / top / left / bottom / rightEdições de metadados de camada suportadas
Layer.bounds / width / height / channels_countGeometria de camada somente leitura
Layer.channel_information / layer_mask_data / layer_blending_ranges_dataMetadados de canal/máscara/fusão somente leitura

Ver também

 Português