Como trabalhar com camadas PSD em Python

Como trabalhar com camadas PSD em Python

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 somente leitura.

Guia passo a passo

Etapa 1: Instalar o pacote

git clone https://github.com/aspose-psd-foss/Aspose.PSD-FOSS-for-Python.git
cd Aspose.PSD-FOSS-for-Python
# No packaging manifest is published yet -- run from this folder,
# or add it to PYTHONPATH:
export PYTHONPATH=$PWD:$PYTHONPATH

Etapa 2: Importar as classes necessárias

PsdImage carrega o documento; BlendMode é usado posteriormente para definir o modo de mesclagem de uma camada:

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

Etapa 3: Carregar um Documento e Listar Suas Camadas

Carregue o documento, então itere layers para ver o nome e a geometria de cada camada:

image = PsdImage.load("input.psd")

for layer in image.layers:
    print(f"{layer.name}: {layer.width}x{layer.height} at ({layer.left},{layer.top})")

Etapa 4: Ler e Editar a Visibilidade, Opacidade e Modo de Mesclagem da Camada

is_visible, opacity (convenionalmente 0-255), clipping, name e blend_mode_key todos possuem setters funcionais:

layer = image.layers[0]

layer.is_visible = False          # hide the layer
layer.opacity = 200               # ~78% opacity
layer.blend_mode_key = BlendMode.MULTIPLY
layer.name = "Renamed Layer"

Etapa 5: Ler e Reposicionar os Limites da Camada

bounds, width, height e channels_count são somente leitura — mas top, left, bottom e right cada um tem um setter funcional que reposiciona a camada:

print(f"Bounds: {layer.bounds}")
print(f"Channels: {layer.channels_count}")

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, então você pode substituir toda a coleção (por exemplo, para remover uma camada):

image.layers = [l for l in image.layers if l.name != "Renamed Layer"]

Etapa 7: Salvar o Documento

Persista todas as edições feitas nas etapas anteriores de volta ao disco, depois libere os recursos da imagem:

image.save("output.psd")
image.dispose()

Problemas Comuns e Correções

NotSupportedException ao definir channel_information, layer_mask_data, ou layer_blending_ranges_data. Estes três Layer os setters não são suportados nesta compilação FOSS — trate-os como somente leitura.

O valor da opacidade parece incorreto após defini-lo. opacity é convencionalmente um valor de 0-255, não uma fração de 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 está modificando o Layer instância obtida de image.layers, e que você chame image.save() depois de 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 uma lista filtrada 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.blend_mode_key.

Os dados da máscara de camada estão disponíveis?

Layer.layer_mask_data tem um getter funcional, mas seu setter gera NotSupportedException nesta compilação FOSS.

Ver também

 Português