การทำงานกับเลเยอร์

สร้างกลุ่มเลเยอร์

กลุ่มเลเยอร์ประกอบด้วยหนึ่งหรือมากกว่าหนึ่งเลเยอร์และช่วยในการจัดระเบียบเลเยอร์ที่คล้ายหรือเกี่ยวข้องกัน โดยใช้ Aspose.PSD สำหรับ .NET คุณสามารถสร้างกลุ่มเลเยอร์ ในวัตถุดิบบใหม่ AddLayerGroup ได้ โดยเพิ่มเมธอดใหม่ในคลาส PsdImage เพื่อเพิ่มกลุ่มเลเยอร์

ขั้นตอนในการสร้างกลุ่มเลเยอร์มีความง่ายดังต่อไปนี้:

  • สร้างอินสแตนซ์ของภาพโดยใช้คลาส PsdImage ด้วยความกว้างที่ระบุ, ความสูง และตัวเลือกของภาพ
  • สร้าง LayerGroup ด้วยชื่อกลุ่มและดัชนีที่ระบุ
  • สร้างอินสแตนซ์ของคลาสเลเยอร์ และกำหนดภาพ 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 ในคลาสเลเยอร์เพื่อแสดงชื่อเลเยอร์อย่างถูกต้อง ได้มีการสังเกตว่าเมื่อ Photoshop บันทึกชื่อเลเยอร์โดยใช้คุณสมบัติ Name แล้ว ตัวอักขระเกาหลีถูกเก็บเป็น byte 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");
}