Layers
Layers
PsdImage.Layers renvoie chaque calque analysé sous forme d’un tableau Layer. Chaque Layer expose sa propre géométrie, visibilité et état de composition, ainsi que les métadonnées concernant ses canaux, son masque et ses plages de fusion.
Lecture des métadonnées du calque
Name, Bounds (et les dérivés Width/Height/Top/Left/Bottom/Right), IsVisible, Opacity, Clipping, BlendModeKey et ChannelsCount sont tous lisibles directement.
foreach (Layer layer in image.Layers)
{
Console.WriteLine($"{layer.Name}: {layer.Bounds}, " +
$"Visible={layer.IsVisible}, Opacity={layer.Opacity}, " +
$"BlendMode={layer.BlendModeKey}");
}Modifications de métadonnées prises en charge
Name, IsVisible, Opacity, Clipping, BlendModeKey et les quatre bords des limites (Top/Left/Bottom/Right) peuvent être modifiés sur place et réécrits avec PsdImage.Save().
Layer layer = image.Layers[0];
layer.Name = $"{layer.Name} (edited)";
layer.IsVisible = !layer.IsVisible;
layer.Opacity = 128;
layer.BlendModeKey = BlendMode.Multiply;
image.Save(outputPath);Métadonnées des canaux et du masque
ChannelInformation, LayerMaskData et LayerBlendingRangesData sont en mode lecture seule dans cette version FOSS — leurs setters lèvent NotSupportedException.
foreach (ChannelInformation channel in layer.ChannelInformation)
{
Console.WriteLine($"Channel {channel.ChannelID}: {channel.CompressionMethod}, {channel.Length} bytes");
}
if (layer.LayerMaskData is { } mask)
{
Console.WriteLine($"Mask bounds: {mask.MaskRectangle}, flags: {mask.Flags}");
}Suppression ou réorganisation des calques
PsdImage.Layers possède à la fois un setter et un getter: assigner un tableau filtré ou réordonné remplace la collection de calques du document. Il n’existe aucun moyen public de créer une nouvelle instance de Layer, ce qui ne permet que de supprimer ou de réordonner les calques déjà présents — pas d’en ajouter depuis zéro.
// Keep only visible layers
image.Layers = image.Layers.Where(layer => layer.IsVisible).ToArray();
image.Save(outputPath);Conseils et bonnes pratiques
- Indexez
image.Layerspar position; l’ordre du tableau correspond à l’ordre des calques du document. BlendModeKeyaccepte n’importe quelle valeur d’énumérationBlendMode— aucune validation n’est effectuée par rapport au mode couleur déclaré du document.ChannelInformation,LayerMaskDataetLayerBlendingRangesDatapeuvent être lus mais jamais réassignés.- Appelez
PsdImage.Save()une fois après toutes les modifications; chaque appel écrit le document complet.
Problèmes courants
| Problème | Cause | Correction |
|---|---|---|
NotSupportedException lors de la définition de ChannelInformation, LayerMaskData ou LayerBlendingRangesData | Ces trois propriétés sont en lecture seule dans la version FOSS malgré la présence d’un setter | Lisez la valeur ; n’essayez pas de la réassigner |
LayerMaskData est null pour une couche | Toutes les couches n’ont pas de sous-section de masque | Vérifier la présence de null avant utilisation (layer.LayerMaskData is { } mask) |
FAQ
Puis-je supprimer une couche?
Oui — réaffectez image.Layers à un tableau filtré. Vous ne pouvez pas ajouter une toute nouvelle couche, car Layer n’a pas de constructeur public; seules les couches analysées existantes peuvent être conservées, supprimées ou réordonnées.
Puis-je modifier les données de canal ou de masque d’une couche?
Non. ChannelInformation, LayerMaskData et LayerBlendingRangesData sont en mode lecture seule — seules Name, IsVisible, Opacity, Clipping, BlendModeKey et les bordures des limites peuvent être modifiées.
API Reference Résumé
| Classe/Méthode | Description |
|---|---|
PsdImage.Layers | Obtient ou définit la collection de calques — modifiable uniquement pour la suppression ou le réordonnancement |
Layer.Name / IsVisible / Opacity / Clipping / BlendModeKey / Top / Left / Bottom / Right | Modifications de métadonnées de calque prises en charge |
Layer.Bounds / Width / Height / ChannelsCount | Géométrie de calque en lecture seule |
Layer.ChannelInformation / LayerMaskData / LayerBlendingRangesData | Métadonnées de canal/masque/fusion en lecture seule |