Comment travailler avec les calques PSD dans .NET

Comment travailler avec les calques PSD dans .NET

Ce guide montre comment répertorier les calques d’un document, lire et modifier les métadonnées éditables 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 des métadonnées éditables — nom, visibilité, opacité, découpage, mode de fusion et position (bords des limites) — ainsi que les limites globales en lecture seule et les informations de canal.

Guide étape par étape

Étape 1: Installer le paquet

git clone https://github.com/aspose-psd-foss/Aspose.PSD-FOSS-for-.NET.git
cd Aspose.PSD-FOSS-for-.NET
dotnet build

Étape 2: Importer les classes requises

Les méthodes d’extension LINQ utilisées plus tard (Where) proviennent de System.Linq; les types spécifiques aux PSD proviennent des deux espaces de noms Aspose.PSD ci-dessous.

using System.Linq;
using Aspose.PSD.FileFormats.Psd;
using Aspose.PSD.FileFormats.Core.Blending;

É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:

using var image = PsdImage.Load("input.psd");

foreach (var layer in image.Layers)
{
    Console.WriteLine($"{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

IsVisible, Opacity (0-255), Clipping, Name et BlendModeKey disposent tous de setters fonctionnels:

var layer = image.Layers[0];

layer.IsVisible = false;          // hide the layer
layer.Opacity = 200;              // ~78% opacity
layer.BlendModeKey = BlendMode.Multiply;
layer.Name = "Renamed Layer";

Étape 5: lire et repositionner les limites du calque

Bounds, Width, Height et ChannelsCount sont en lecture seule — mais Top, Left, Bottom et Right disposent chacun d’un setter fonctionnel qui repositionne le calque:

Console.WriteLine($"Bounds: {layer.Bounds}");
Console.WriteLine($"Channels: {layer.ChannelsCount}");

layer.Left = 10;
layer.Top = 20;
layer.Right = 40;
layer.Bottom = 60;

Étape 6: remplacer la collection de calques

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

image.Layers = image.Layers.Where(l => l.Name != "Renamed Layer").ToArray();

Étape 7 : Enregistrer le Document

Enregistrez chaque modification apportée aux étapes précédentes sur le disque:

image.Save("output.psd");

Problèmes courants et solutions

NotSupportedException lors du réglage ChannelInformation, LayerMaskData, ou LayerBlendingRangesData. 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 un byte (0-255), pas une fraction 0.0-1.0 ou un pourcentage — layer.Opacity = 200 signifie environ 78% opaque (200/255).

Les modifications d’une couche n’apparaissent pas après l’enregistrement. Confirmez que vous modifiez le Layer instance obtenue à partir de image.Layers, et que vous appelez image.Save après avoir effectué vos modifications.

Foire aux questions

Puis-je supprimer un calque d’un document ?

Oui — PsdImage.Layers possède un setter fonctionnel, vous pouvez donc lui assigner un tableau filtré pour supprimer des calques (voir l’étape 6).

Quels modes de fusion sont disponibles ?

BlendMode inclut des valeurs telles que Normal, Multiply, Screen, Overlay et Darken, entre autres — définies via Layer.BlendModeKey.

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

Layer.LayerMaskData possède un getter fonctionnel, mais son setter lève NotSupportedException dans cette version FOSS.

Voir aussi

 Français