Робота з шарами

Створення групи шарів

Група шарів складається з одного або кількох шарів та допомагає організувати схожі або пов’язані шари. Використовуючи Aspose.PSD для .NET, ви можете створювати групу шарів. Для цього в клас PsdImage був доданий новий метод AddLayerGroup, що додає групу шарів.

Кроки для створення групи шарів настільки прості, як наведено нижче:

  • Створити екземпляр зображення за допомогою класу PsdImage з вказаними шириною, висотою та параметрами зображення.
  • Створити LayerGroupз вказаним індексом та назвою групи.
  • Створити екземпляр класу Layer та призначити йому зображення PSD.
  • Додати створений шар до групи шарів за допомогою методу AddLayer, який надається класом LayerGroup.
  • Зберегти результати.

У наведеному нижче фрагменті коду показано, як створити групу шарів.

// 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 для .NET. Для цього в клас Layer було додано новий властивість DisplayName для відображення назви шару належним чином. Було помічено, що коли Photoshop зберігає назву шару за допомогою властивості Name, то корейські символи зберігаються як байт 63 ‘?’ у системі ASCII. Тому, якщо ви хочете належним чином відобразити назву шару, використовуйте властивість 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");
}