Praca z warstwami

Utwórz grupę warstw

Grupa warstw składa się z jednej lub więcej warstw i pomaga zorganizować podobne lub powiązane warstwy. Korzystając z Aspose.PSD dla .NET, można utworzyć grupę warstw. W tym celu dodano nową metodę AddLayerGroup do klasy PsdImage , aby dodać grupę warstw.

Kroki do stworzenia grupy warstw są proste, jak poniżej:

  • Utwórz instancję obrazu za pomocą klasy PsdImage z określoną szerokością, wysokością i opcjami obrazu.
  • Utwórz LayerGroup z określoną nazwą grupy i indeksem.
  • Utwórz instancję klasy Layer i przypisz do niej obraz PSD.
  • Dodaj utworzoną warstwę do grupy warstw za pomocą metody AddLayer wystawionej przez klasę LayerGroup.
  • Zapisz wyniki.

Poniższy fragment kodu pokazuje, jak utworzyć grupę warstw.

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

Zmień nazwę warstwy

Możesz użyć dowolnej nazwy, ale typową praktyką jest użycie ogólnego opisu obiektu lub elementu znajdującego się na tej warstwie. Ten artykuł demonstruje, jak można zmienić nazwę warstwy korzystając z Aspose.PSD dla .NET. W tym celu dodano nową właściwość DisplayName do klasy Layer, aby właściwie wyświetlać nazwę warstwy. Zauważono, że gdy Photoshop zapisuje nazwę warstwy używając właściwości Name, to koreańskie znaki są przechowywane jako bajt 63'?' w ASCII. Dlatego, jeśli chcesz poprawnie wyświetlić nazwę warstwy, użyj właściwości DisplayName, ponieważ właściwość Name nie obsługuje koreańskich znaków.

Poniższy przykładowy kod pokazuje, jak zmienić nazwę warstwy.

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

Wsparcie dla połączonych warstw

Łączenie warstw jest podobne do grupowania warstw. Jeśli łączysz dwie lub więcej warstw, pozwoli ci to dokonywać określonych zmian w obu połączonych warstwach. Na przykład, jeśli zastosujesz transformacje do jednej warstwy, zostaną one zastosowane do wszystkich innych połączonych warstw. Ten artykuł demonstruje, jak otrzymać i rozłączyć połączone warstwy korzystając z 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");
}