Trabajando con Capas

Crear un Grupo de Capas

Un grupo de capas consta de una o más capas y ayuda a organizar capas similares o relacionadas. Utilizando Aspose.PSD para .NET puedes crear un grupo de capas. Para este propósito, se ha agregado un nuevo método AddLayerGroup en la clase PsdImage para agregar el grupo de capas.

Los pasos para crear grupos de capas son tan simples como se muestra a continuación:

  • Crea una instancia de una imagen utilizando la clase PsdImage con el ancho, alto y opciones de imagen especificados.
  • Crea un LayerGroup con el nombre de grupo y el índice especificados.
  • Crea una instancia de la clase Layer y asígnale la imagen PSD.
  • Agrega la capa creada al grupo de capas utilizando el método AddLayer expuesto por la clase LayerGroup.
  • Guarda los resultados.

El siguiente fragmento de código te muestra cómo crear un grupo de capas.

// 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");
}

Renombrar una Capa

Puedes usar cualquier nombre que desees, pero la práctica típica es usar una descripción general del objeto o elemento que se encuentra en esa capa. Este artículo demuestra cómo cambiar el nombre de una capa utilizando Aspose.PSD para .NET. Para este propósito, se ha agregado una nueva propiedad DisplayName en la clase Layer para mostrar adecuadamente un nombre de capa. Se ha observado que cuando Photoshop guarda un nombre de capa utilizando la propiedad Name, entonces los caracteres coreanos se almacenan como byte 63'?' en ASCII. Por lo tanto, si deseas mostrar correctamente un nombre de capa, utiliza la propiedad DisplayName porque la propiedad Name no es compatible con caracteres coreanos.

El siguiente ejemplo de código muestra cómo puedes renombrar una capa.

// 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");
}

Soporte de Capas Enlazadas

Enlazar capas es como agrupar las capas. Si estás enlazando dos o más capas, te permitirá hacer ciertos cambios en ambas capas enlazadas. Por ejemplo, si aplicas transformaciones a una capa, estas se aplicarán a todas las otras capas enlazadas. Este artículo muestra cómo puedes obtener y desenlazar capas enlazadas utilizando 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");
}