Travailler avec les calques

Créer un groupe de calques

Un groupe de calques est composé d’un ou de plusieurs calques et il aide à organiser des calques similaires ou liés. En utilisant Aspose.PSD pour .NET, vous pouvez créer un groupe de calques. À cet effet, une nouvelle méthode AddLayerGroup a été ajoutée dans la classe PsdImage pour ajouter le groupe de calques.

Les étapes pour créer des groupes de calques sont aussi simples que ci-dessous :

  • Créez une instance d’une image en utilisant la classe PsdImage avec une largeur, une hauteur et des options d’image spécifiées.
  • Créez un LayerGroup avec le nom de groupe et l’index spécifiés.
  • Créez une instance de la classe Layer et attribuez-lui l’image PSD.
  • Ajoutez le calque créé au groupe de calques en utilisant la méthode AddLayer exposée par la classe LayerGroup.
  • Enregistrez les résultats.

Le code suivant vous montre comment créer un groupe de calques.

// For complete examples and data files, please go to https://github.com/aspose-psd/Aspose.PSD-for-.NET
string inputFile = dataDir + "ButtonTemp.psd";
var createOptions = new PsdOptions();
createOptions.Source = new FileCreateSource(inputFile, false);
createOptions.Palette = new PsdColorPalette(new Color[] { Color.Green });
using (var psdImage = (PsdImage)Image.Create(createOptions, 500, 500))
{
LayerGroup group1 = psdImage.AddLayerGroup("Group 1", 0, true);
Layer layer1 = new Layer(psdImage);
layer1.Name = "Layer 1";
group1.AddLayer(layer1);
LayerGroup group2 = group1.AddLayerGroup("Group 2", 1);
Layer layer2 = new Layer(psdImage);
layer2.Name = "Layer 2";
group2.AddLayer(layer2);
Layer layer3 = new Layer(psdImage);
layer3.Name = "Layer 3";
group2.AddLayer(layer3);
Layer layer4 = new Layer(psdImage);
layer4.Name = "Layer 4";
group1.AddLayer(layer4);
psdImage.Save(dataDir + "LayerGroups_out.psd");
}

Renommer un calque

Vous pouvez utiliser un nom que vous souhaitez, mais la pratique typique est d’utiliser une description générale de l’objet ou de l’élément qui se trouve sur ce calque. Cet article montre comment vous pouvez changer le nom d’un calque en utilisant Aspose.PSD pour .NET. À cet effet, une nouvelle propriété DisplayName a été ajoutée dans la classe Layer pour afficher correctement un nom de calque. Il a été observé que lorsque Photoshop enregistre un nom de calque en utilisant la propriété Name, alors les caractères coréens sont stockés en tant que byte 63'?' en ASCII. Donc, si vous voulez afficher correctement un nom de calque, utilisez la propriété DisplayName car la propriété Name ne prend pas en charge les caractères coréens.

L’exemple de code suivant montre comment vous pouvez renommer un calque.

// For complete examples and data files, please go to https://github.com/aspose-psd/Aspose.PSD-for-.NET
// The path to the documents directory.
string dataDir = RunExamples.GetDataDir_PSD();
// make changes in layer names and save it
using (var image = (PsdImage)Image.Load(dataDir + "Korean_layers.psd"))
{
for (int i = 0; i < image.Layers.Length; i++)
{
var layer = image.Layers[i];
// set new value into DisplayName property
layer.DisplayName += "_changed";
}
image.Save(dataDir + "Korean_layers_output.psd");
}

Prise en charge des calques liés

La liaison des calques est similaire au regroupement des calques. Si vous liez deux calques ou plus, cela vous permettra de faire des changements spécifiques à ces calques liés. Par exemple, si vous appliquez des transformations à un calque, elles seront appliquées à tous les autres calques liés. Cet article montre comment obtenir et délier des calques liés en utilisant Aspose.PSD.

// For complete examples and data files, please go to https://github.com/aspose-psd/Aspose.PSD-for-.NET
{
Layer[] layers = psd.Layers;
// link all layers in one linked group
short layersLinkGroupId = psd.LinkedLayersManager.LinkLayers(layers);
// gets id for one layer
short linkGroupId = psd.LinkedLayersManager.GetLinkGroupId(layers[0]);
if (layersLinkGroupId != linkGroupId)
{
throw new Exception("layersLinkGroupId and linkGroupId are not equal.");
}
// gets all linked layers by link group id.
Layer[] linkedLayers = psd.LinkedLayersManager.GetLayersByLinkGroupId(linkGroupId);
// unlink each layer from group
foreach (var linkedLayer in linkedLayers)
{
psd.LinkedLayersManager.UnlinkLayer(linkedLayer);
}
// retrieves NULL for a link group ID that has no layers in the group.
linkedLayers = psd.LinkedLayersManager.GetLayersByLinkGroupId(linkGroupId);
if (linkedLayers != null)
{
throw new Exception("The linkedLayers field is not NULL.");
}
psd.Save(dataDir + "LinkedLayerexample_output.psd");
}