Arbeiten mit Ebenen

Erstellen einer Ebenengruppe

Eine Ebenengruppe besteht aus einer oder mehreren Ebenen und dient dazu, ähnliche oder verwandte Ebenen zu organisieren. Mit Aspose.PSD für .NET können Sie eine Ebenengruppe erstellen. Hierfür wurde in der Klasse PsdImage eine neue Methode AddLayerGroup hinzugefügt, die die Ebenengruppe hinzufügt.

Die Schritte zum Erstellen von Ebenengruppen sind wie folgt:

  • Erstellen Sie eine Instanz eines Bildes unter Verwendung der Klasse PsdImage mit einer festgelegten Breite, Höhe und Bildeoptionen.
  • Erstellen Sie eine LayerGroup mit dem angegebenen Gruppennamen und Index.
  • Erstellen Sie eine Instanz der Layer-Klasse und weisen Sie das PSD-Bild zu.
  • Fügen Sie die erstellte Ebene der Ebenengruppe unter Verwendung der AddLayer-Methode hinzu, die von der LayerGroup-Klasse bereitgestellt wird.
  • Speichern Sie die Ergebnisse.

Der folgende Code zeigt Ihnen, wie Sie eine Ebenengruppe erstellen können.

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

Umbenennen einer Ebene

Sie können jeden beliebigen Namen verwenden, aber die übliche Praxis ist es, eine allgemeine Beschreibung des Objekts oder Elements zu verwenden, das sich auf dieser Ebene befindet. Dieser Artikel zeigt, wie Sie den Namen einer Ebene unter Verwendung von Aspose.PSD für .NET ändern können. Hierfür wurde in der Layer-Klasse ein neues DisplayName -Eigenschaft hinzugefügt, um einen Layernamen ordnungsgemäß anzuzeigen. Es wurde festgestellt, dass wenn Photoshop einen Layernamen unter Verwendung der Name -Eigenschaft speichert, koreanische Zeichen als byte 63'?' in ASCII gespeichert werden. Wenn Sie also einen Layernamen ordnungsgemäß anzeigen möchten, verwenden Sie die DisplayName -Eigenschaft, da die Name -Eigenschaft koreanische Zeichen nicht unterstützt.

Das folgende Codebeispiel zeigt, wie Sie einen Layer umbenennen können.

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

Unterstützung von verknüpften Ebenen

Das Verknüpfen von Ebenen ist ähnlich wie das Gruppieren von Ebenen. Wenn Sie zwei oder mehr Ebenen miteinander verknüpfen, ermöglicht es Ihnen, bestimmte Änderungen an beiden verknüpften Ebenen vorzunehmen. Beispielsweise, wenn Sie Transformationen auf eine Ebene anwenden, werden sie auf alle anderen verknüpften Ebenen angewendet. Dieser Artikel zeigt, wie Sie verknüpfte Ebenen abrufen und trennen können, indem Sie Aspose.PSD verwenden.

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