Comment travailler avec les calques PSD dans Python

Comment travailler avec les calques PSD dans Python

Ce guide montre comment répertorier les calques d’un document, lire et modifier les métadonnées modifiables d’un calque, repositionner un calque et supprimer un calque de la collection. La propriété layers d’un PsdImage chargé renvoie sa collection d’objets Layer. Chaque Layer expose les métadonnées modifiables — nom, visibilité, opacité, découpage, mode de fusion et position (bords des limites) — ainsi que les limites globales et les informations de canal en lecture seule.

Guide étape par étape

Étape 1 : Installer le package

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

Étape 2 : Importer les classes requises

PsdImage charge le document; BlendMode est utilisé plus tard pour définir le mode de fusion d’un calque:

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

Étape 3 : charger un document et lister ses calques

Chargez le document, puis parcourez layers pour voir le nom et la géométrie de chaque calque :

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

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

Étape 4 : lire et modifier la visibilité, l’opacité et le mode de fusion du calque

is_visible, opacity (conventionnellement 0-255), clipping, name et blend_mode_key ont tous des setters fonctionnels :

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"

Étape 5 : lire et repositionner les limites du calque

bounds, width, height et channels_count sont en lecture seule — mais top, left, bottom et right ont chacun un setter fonctionnel qui repositionne le calque :

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

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

Étape 6 : remplacer la collection de calques

PsdImage.layers lui-même possède un setter fonctionnel, vous pouvez donc remplacer l’ensemble de la collection (par exemple, pour supprimer un calque) :

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

Étape7: Enregistrer le document

Conservez chaque modification effectuée aux étapes précédentes sur le disque, puis libérez les ressources de l’image:

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

Problèmes courants et solutions

NotSupportedException lors du réglage channel_information, layer_mask_data, ou layer_blending_ranges_data. Ces trois Layer les setters ne sont pas pris en charge dans cette version FOSS — considérez-les comme en lecture seule.

La valeur d’opacité semble incorrecte après l’avoir réglée. opacity est généralement une valeur de 0-255, pas une fraction de 0.0-1.0 ou un pourcentage — layer.opacity = 200 signifie environ 78 % opaque (200/255).

Les changements d’un calque n’apparaissent pas après l’enregistrement. Confirmez que vous modifiez le Layer instance obtenue de image.layers, et que vous appelez image.save() après avoir effectué vos modifications.

Questions fréquemment posées

Puis-je supprimer un calque d’un document?

Oui — PsdImage.layers possède un setter fonctionnel, vous pouvez donc lui attribuer une liste filtrée pour supprimer des calques (voir l’étape 6).

Quels modes de fusion sont disponibles?

BlendMode comprend des valeurs telles que NORMAL, MULTIPLY, SCREEN, OVERLAY et DARKEN, entre autres — définies via Layer.blend_mode_key.

Les données du masque de calque sont-elles disponibles?

Layer.layer_mask_data possède un getter fonctionnel, mais son setter déclenche NotSupportedException dans cette version FOSS.

Voir aussi

 Français