วิธีทำงานกับเลเยอร์ PSD ใน .NET
คู่มือนี้แสดงวิธีการแสดงรายการเลเยอร์ของเอกสาร, อ่านและเปลี่ยนเมตาดาต้าเลเยอร์ที่สามารถแก้ไขได้, ย้ายตำแหน่งเลเยอร์, และลบเลเยอร์ออกจากคอลเลกชัน. คุณสมบัติ Layers ของ PsdImage ที่โหลดแล้วจะคืนค่าคอลเลกชันของอ็อบเจกต์ Layer. แต่ละ Layer จะเปิดเผยเมตาดาต้าที่สามารถแก้ไขได้ — ชื่อ, การมองเห็น, ความทึบ, การคลิป, โหมดผสม, และตำแหน่ง (ขอบเขต) — รวมถึงขอบเขตโดยรวมและข้อมูลช่องสัญญาณที่อ่านได้อย่างเดียว.
คู่มือทีละขั้นตอน
ขั้นตอนที่ 1: ติดตั้งแพ็กเกจ
git clone https://github.com/aspose-psd-foss/Aspose.PSD-FOSS-for-.NET.git
cd Aspose.PSD-FOSS-for-.NET
dotnet buildขั้นตอนที่ 2: นำเข้าคลาสที่จำเป็น
เมธอดส่วนขยาย LINQ ที่ใช้ต่อม (Where) มาจาก System.Linq; ประเภทเฉพาะ PSD มาจากสองเนมสเปซ Aspose.PSD ด้านล่างนี้.
using System.Linq;
using Aspose.PSD.FileFormats.Psd;
using Aspose.PSD.FileFormats.Core.Blending;ขั้นตอนที่ 3: โหลดเอกสารและแสดงรายการเลเยอร์ของมัน
โหลดเอกสารแล้ววนซ้ำ Layers เพื่อดูชื่อและรูปทรงของแต่ละเลเยอร์:
using var image = PsdImage.Load("input.psd");
foreach (var layer in image.Layers)
{
Console.WriteLine($"{layer.Name}: {layer.Width}x{layer.Height} at ({layer.Left},{layer.Top})");
}ขั้นตอนที่ 4: อ่านและแก้ไขการมองเห็นของเลเยอร์, ความทึบแสง, และโหมดการผสม
IsVisible, Opacity (0-255), Clipping, Name และ BlendModeKey มีตัวตั้งค่าที่ทำงานได้ทั้งหมด:
var layer = image.Layers[0];
layer.IsVisible = false; // hide the layer
layer.Opacity = 200; // ~78% opacity
layer.BlendModeKey = BlendMode.Multiply;
layer.Name = "Renamed Layer";ขั้นตอนที่ 5: อ่านและปรับตำแหน่งขอบเขตของเลเยอร์
Bounds, Width, Height และ ChannelsCount เป็นแบบอ่านอย่างเดียว — แต่ Top, Left, Bottom และ Right มีตัวตั้งค่าที่ทำงานได้แต่ละอันซึ่งปรับตำแหน่งของเลเยอร์:
Console.WriteLine($"Bounds: {layer.Bounds}");
Console.WriteLine($"Channels: {layer.ChannelsCount}");
layer.Left = 10;
layer.Top = 20;
layer.Right = 40;
layer.Bottom = 60;ขั้นตอนที่ 6: แทนที่คอลเลกชันของเลเยอร์
PsdImage.Layers เองมีตัวตั้งค่าที่ทำงานได้ ดังนั้นคุณจึงสามารถแทนที่คอลเลกชันทั้งหมด (เช่น เพื่อลบเลเยอร์):
image.Layers = image.Layers.Where(l => l.Name != "Renamed Layer").ToArray();ขั้นตอนที่ 7: บันทึกเอกสาร
บันทึกการแก้ไขทั้งหมดที่ทำในขั้นตอนก่อนหน้ากลับไปยังดิสก์:
image.Save("output.psd");ปัญหาทั่วไปและการแก้ไข
NotSupportedException เมื่อกำหนดค่า ChannelInformation, LayerMaskData, หรือ LayerBlendingRangesData. สามตัวนี้ Layer ตัวตั้งค่าเหล่านี้ไม่ได้รับการสนับสนุนในรุ่น FOSS นี้ — ให้ถือว่าเป็นแบบอ่านอย่างเดียว.
ค่าความทึบมองเห็นดูผิดหลังจากตั้งค่า. Opacity เป็น byte (0-255), ไม่ใช่ส่วนเศษ 0.0-1.0 หรือเปอร์เซ็นต์ — layer.Opacity = 200 หมายถึงประมาณ 78% ทึบ (200/255).
การเปลี่ยนแปลงในเลเยอร์ไม่ปรากฏหลังจากบันทึก. ยืนยันว่าคุณกำลังแก้ไข Layer อินสแตนซ์ที่ได้รับจาก image.Layers, และคุณเรียก image.Save หลังจากทำการแก้ไขของคุณแล้ว.
คำถามที่พบบ่อย
ฉันสามารถลบเลเยอร์จากเอกสารได้ไหม?
ได้ — PsdImage.Layers มีตัวตั้งค่าที่ทำงานได้ ดังนั้นคุณสามารถกำหนดอาร์เรย์ที่กรองแล้วเพื่อเอาเลเยอร์ออก (ดูขั้นตอนที่ 6).
มีโหมดการผสมอะไรบ้าง?
BlendMode มีค่าเช่น Normal, Multiply, Screen, Overlay และ Darken เป็นต้น — ตั้งค่าผ่าน Layer.BlendModeKey.
มีข้อมูลมาสก์เลเยอร์หรือไม่?
Layer.LayerMaskData มีตัวดึงข้อมูลที่ทำงานได้ แต่ตัวตั้งค่าของมันจะทำให้เกิด NotSupportedException ในการสร้าง FOSS นี้.