Working with Layers

创建图层组

图层组由一个或多个图层组成,有助于组织相似或相关的图层。使用 Aspose.PSD for .NET,您可以创建一个图层组。为此,在 PsdImage 类中添加了一个新方法 AddLayerGroup 来添加图层组。

创建图层组的步骤如下:

  • 使用指定的宽度、高度和图像选项创建一个图像实例。
  • 使用指定的组名和索引创建一个 LayerGroup
  • 创建一个 Layer 类的实例并将 PSD 图像分配给它。
  • 使用 LayerGroup 类公开的 AddLayer 方法将创建的图层添加到图层组中。
  • 保存结果。

以下代码片段演示了如何创建图层组。

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

重命名图层

您可以使用任何您喜欢的名称,但是通常的做法是使用该图层上对象或元素的一般描述。本文演示了如何使用 Aspose.PSD for .NET 更改图层的名称。为此,在 Layer 类中添加了一个新属性 DisplayName 以正确显示图层名称。已经观察到,当 Photoshop 使用 Name 属性保存图层名称时,韩文字符会以 ASCII 中的字节 63'?' 存储。因此,如果您想正确显示图层名称,请使用 DisplayName 属性,因为 Name 属性不支持韩文字符。

以下代码示例显示了如何重命名一个图层。

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

支持链接图层

链接图层类似于对图层进行分组。如果您将两个或多个图层链接在一起,那么您可以对这些链接的图层进行某些更改。例如,如果您对一个图层应用变换,则所有其他链接的图层也会应用这些变换。本文演示了如何使用 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");
}