Layers
Layers
PsdImage.Layers คืนค่าทุกเลเยอร์ที่ทำการแยกวิเคราะห์เป็นอาร์เรย์ Layer. แต่ละ Layer จะเปิดเผยเรขาคณิตของมันเอง, การมองเห็นและสถานะการผสม, รวมถึงเมตาดาต้าเกี่ยวกับช่องสัญญาณ, มาสก์, และช่วงการผสมสี.
อ่านเมตาดาต้าเลเยอร์
Name, Bounds (และ Width/Height/Top/Left/Bottom/Right ที่สืบทอด), IsVisible, Opacity, Clipping, BlendModeKey, และ ChannelsCount สามารถอ่านได้โดยตรง.
foreach (Layer layer in image.Layers)
{
Console.WriteLine($"{layer.Name}: {layer.Bounds}, " +
$"Visible={layer.IsVisible}, Opacity={layer.Opacity}, " +
$"BlendMode={layer.BlendModeKey}");
}การแก้ไขเมตาดาต้าที่รองรับ
Name, IsVisible, Opacity, Clipping, BlendModeKey, และขอบพิกัดสี่ด้าน (Top/Left/Bottom/Right) สามารถเปลี่ยนแปลงได้ในที่เดิมและเขียนกลับด้วย PsdImage.Save().
Layer layer = image.Layers[0];
layer.Name = $"{layer.Name} (edited)";
layer.IsVisible = !layer.IsVisible;
layer.Opacity = 128;
layer.BlendModeKey = BlendMode.Multiply;
image.Save(outputPath);เมตาดาต้าช่องสัญญาณและมาสก์
ChannelInformation, LayerMaskData และ LayerBlendingRangesData เป็นแบบอ่านอย่างเดียวในรุ่น FOSS นี้ — ตัวตั้งค่าของพวกมันจะโยน NotSupportedException.
foreach (ChannelInformation channel in layer.ChannelInformation)
{
Console.WriteLine($"Channel {channel.ChannelID}: {channel.CompressionMethod}, {channel.Length} bytes");
}
if (layer.LayerMaskData is { } mask)
{
Console.WriteLine($"Mask bounds: {mask.MaskRectangle}, flags: {mask.Flags}");
}การลบหรือจัดลำดับชั้นใหม่
PsdImage.Layers มีตัวตั้งค่าและตัวดึงค่า: การกำหนดอาร์เรย์ที่ผ่านการกรองหรือจัดลำดับใหม่จะทดแทนคอลเลกชันชั้นของเอกสาร ไม่มีวิธีสาธารณะในการสร้างอินสแตนซ์ Layer ใหม่ทั้งหมด ดังนั้นฟีเจอร์นี้จึงรองรับเพียงการลบหรือจัดลำดับชั้นที่มีอยู่แล้ว — ไม่ใช่การเพิ่มชั้นใหม่ตั้งแต่ต้น.
// Keep only visible layers
image.Layers = image.Layers.Where(layer => layer.IsVisible).ToArray();
image.Save(outputPath);เคล็ดลับและแนวทางปฏิบัติที่ดีที่สุด
- เข้าถึง
image.Layersตามตำแหน่ง; ลำดับของอาร์เรย์ตรงกับลำดับชั้นของเอกสารเอง. BlendModeKeyยอมรับค่า enumBlendModeใด ๆ — ไม่มีการตรวจสอบความถูกต้องกับโหมดสีที่ประกาศในเอกสาร.ChannelInformation,LayerMaskDataและLayerBlendingRangesDataสามารถอ่านได้แต่ไม่สามารถกำหนดค่าใหม่ได้.- เรียก
PsdImage.Save()หนึ่งครั้งหลังจากการแก้ไขทั้งหมด; ทุกการเรียกจะเขียนเอกสารทั้งหมด.
ปัญหาทั่วไป
| ปัญหา | สาเหตุ | วิธีแก้ไข |
|---|---|---|
NotSupportedException ขณะตั้งค่า ChannelInformation, LayerMaskData หรือ LayerBlendingRangesData | คุณสมบัติเหล่านี้ 3 รายการเป็นแบบอ่านอย่างเดียวในรุ่น FOSS แม้ว่าจะมีตัวตั้งค่า | อ่านค่าที่ได้; อย่าพยายามกำหนดค่าใหม่ |
LayerMaskData คือ null สำหรับเลเยอร์ | ไม่ใช่ทุกเลเยอร์ที่มีส่วนย่อยของมาสก์ | ตรวจสอบ null ก่อนใช้งาน (layer.LayerMaskData is { } mask) |
FAQ
ฉันสามารถลบเลเยอร์ได้หรือไม่?
ใช่ — กำหนดค่า image.Layers ใหม่เป็นอาเรย์ที่กรองแล้ว คุณไม่สามารถเพิ่มเลเยอร์ใหม่ได้ เนื่องจาก Layer ไม่มีคอนสตรัคเตอร์สาธารณะ; สามารถเก็บ, ลบ หรือจัดเรียงลำดับเลเยอร์ที่วิเคราะห์อยู่แล้วเท่านั้น.
ฉันสามารถเปลี่ยนช่องหรือข้อมูลมาสก์ของเลเยอร์ได้หรือไม่?
ไม่. ChannelInformation, LayerMaskData และ LayerBlendingRangesData เป็นแบบอ่านอย่างเดียว — สามารถเปลี่ยนได้เฉพาะ Name, IsVisible, Opacity, Clipping, BlendModeKey และขอบเขตเท่านั้น.
API Reference สรุป
| คลาส/เมธอด | คำอธิบาย |
|---|---|
PsdImage.Layers | รับหรือกำหนดชุดชั้น — สามารถตั้งค่าได้เฉพาะสำหรับการลบ/จัดลำดับใหม่เท่านั้น |
Layer.Name / IsVisible / Opacity / Clipping / BlendModeKey / Top / Left / Bottom / Right | การแก้ไขเมตาดาต้าชั้นที่รองรับ |
Layer.Bounds / Width / Height / ChannelsCount | เรขาคณิตของชั้นแบบอ่านอย่างเดียว |
Layer.ChannelInformation / LayerMaskData / LayerBlendingRangesData | เมทาดาต้าช่อง/มาสก์/การผสานแบบอ่านอย่างเดียว |