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.