کار با لایهها
ایجاد یک گروه لایه
یک گروه لایه از یک یا چند لایه تشکیل شده است و به کمک آن میتوانید لایههای مشابه یا مرتبط را سازماندهی کنید. با استفاده از Aspose.PSD برای .NET، میتوانید یک گروه لایه ایجاد کنید. به این منظور، یک متد جدید به نام AddLayerGroup به کلاس PsdImage اضافه شده است تا گروه لایه را اضافه کند.
مراحل ایجاد گروههای لایه به شرح زیر است:
- یک نمونه از یک تصویر با استفاده از کلاس 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 استفاده کنید تا نام یک لایه را تغییر دهید. به این منظور، یک ویژگی جدید به نام DisplayName به کلاس لایه اضافه شده است تا نام لایه را به درستی نمایش دهد. مشاهده شده است که هنگامی که فتوشاپ نام یک لایه را با استفاده از ویژگی 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"); | |
} |