วิธีทำงานกับเลเยอร์ PSD ใน .NET

วิธีทำงานกับเลเยอร์ 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 นี้.

ดูเพิ่มเติม

 ภาษาไทย