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.