Cómo trabajar con capas PSD en Python

Cómo trabajar con capas PSD en Python

Esta guía muestra cómo enumerar las capas de un documento, leer y modificar los metadatos editables de una capa, reposicionar una capa y eliminar una capa de la colección. La propiedad layers de un PsdImage cargado devuelve su colección de objetos Layer. Cada Layer expone metadatos editables — nombre, visibilidad, opacidad, recorte, modo de fusión y posición (bordes de los límites) — además de los límites generales y la información de canales, que son de solo lectura.

Guía paso a paso

Paso 1: Instalar el paquete

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

Paso 2: Importar las clases requeridas

PsdImage carga el documento; BlendMode se usa más adelante para establecer el modo de fusión de una capa:

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

Paso 3: Cargar un documento y listar sus capas

Cargue el documento, luego itere layers para ver el nombre y la geometría de cada capa:

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

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

Paso 4: Leer y editar la visibilidad, opacidad y modo de fusión de la capa

is_visible, opacity (convencionalmente 0-255), clipping, name y blend_mode_key todos tienen setters funcionales:

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"

Paso 5: Leer y reposicionar los límites de la capa

bounds, width, height y channels_count son de solo lectura — pero top, left, bottom y right cada uno tiene un setter funcional que reposiciona la capa:

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

layer.left = 10
layer.top = 20
layer.right = 40
layer.bottom = 60

Paso 6: Reemplazar la colección de capas

PsdImage.layers en sí tiene un setter funcional, por lo que puedes reemplazar toda la colección (por ejemplo, para eliminar una capa):

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

Paso 7: Guardar el Documento

Persistir cada edición realizada en los pasos anteriores en el disco, y luego liberar los recursos de la imagen:

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

Problemas comunes y soluciones

NotSupportedException al establecer channel_information, layer_mask_data, o layer_blending_ranges_data. Estos tres Layer Los setters no son compatibles con esta compilación FOSS — trátelos como de solo lectura.

El valor de opacidad parece incorrecto después de establecerlo. opacity es convencionalmente un valor de 0-255, no una fracción 0.0-1.0 o un porcentaje — layer.opacity = 200 significa aproximadamente 78% opaco (200/255).

Los cambios en una capa no aparecen después de guardar. Confirme que está modificando el Layer instancia obtenida de image.layers, y que llame a image.save() después de hacer sus ediciones.

Preguntas frecuentes

¿Puedo eliminar una capa de un documento?

Sí — PsdImage.layers tiene un setter funcional, así que puedes asignarle una lista filtrada para eliminar capas (ver Paso 6).

¿Qué modos de fusión están disponibles?

BlendMode incluye valores como NORMAL, MULTIPLY, SCREEN, OVERLAY y DARKEN, entre otros — configurado a través de Layer.blend_mode_key.

¿Están disponibles los datos de máscara de capa?

Layer.layer_mask_data tiene un getter funcional, pero su setter genera NotSupportedException en esta compilación FOSS.

Ver también

 Español