บทนำ
PsdImage.Layers คืนค่าเลเยอร์ทั้งหมดในเอกสาร PSD หรือ PSB เป็นอาร์เรย์ Layer บทความนี้มองโดยเฉพาะที่สิ่งที่ Layer แสดง: เรขาคณิตและสถานะภาพ, การนับจำนวนโหมดผสมและแฟล็กมาสก์, และคลาสเมตาดาต้าที่อธิบายช่องของเลเยอร์, มาสก์, และช่วงการผสมสี.
สิ่งที่รวมอยู่
คลาสเลเยอร์
แต่ละ Layer มีชื่อ Pascal (Name), Rectangle ขอบเขต (Bounds, พร้อมกับที่สืบทอดจาก Width/Height/Top/Left/Bottom/Right), สถานะการมองเห็นและการผสม (IsVisible, Opacity, Clipping, BlendModeKey), และจำนวนช่อง (ChannelsCount). Name, IsVisible, Opacity, Clipping, BlendModeKey, และสี่ขอบของขอบเขตทั้งหมดสามารถเปลี่ยนแปลงและเขียนกลับได้ด้วย PsdImage.Save().
using var image = (PsdImage)Image.Load(inputPath);
foreach (Layer layer in image.Layers)
{
Console.WriteLine($"{layer.Name}: {layer.Bounds}, " +
$"Visible={layer.IsVisible}, Opacity={layer.Opacity}, " +
$"BlendMode={layer.BlendModeKey}");
}
โหมดผสมและแฟล็กมาสก์
BlendModeKey เป็นค่า enum BlendMode — ไลบรารีกำหนดโหมดผสม PSD มาตรฐานทั้งหมด 29 โหมด (Normal, Multiply, Screen, Overlay, Darken, Lighten, ColorDodge, ColorBurn, HardLight, SoftLight, Difference, Exclusion, Hue, Saturation, Color, Luminosity, และอื่น ๆ). enum LayerMaskFlags แยกต่างหาก (None, RelativeToLayer, Disabled, InvertedWhenBlending, UserMaskFromRenderingOtherData, UserOrVectorMasksHaveParameters) อธิบายพฤติกรรมการเรนเดอร์มาสก์เมื่อเลเยอร์มีมาสก์หนึ่งอัน.
เมทาดาต้าช่องและมาสก์
Layer.ChannelInformation คืนค่า ChannelInformation[] ที่อธิบาย ID ของแต่ละช่อง, วิธีการบีบอัด, และความยาวเป็นไบต์. Layer.LayerMaskData (ซึ่งเป็น LayerMaskData แบบนามธรรม, โดยเฉพาะเป็น LayerMaskDataShort เมื่อมี) อธิบายขอบเขตและแฟล็กของมาสก์เลเยอร์; Layer.LayerBlendingRangesData เปิดเผยช่วงการผสมของคอมโพสิตและแต่ละช่อง. คุณสมบัติทั้งสามนี้เป็นแบบอ่านอย่างเดียวในรุ่น FOSS นี้ — ตัวตั้งค่า (setter) จะโยน NotSupportedException หากถูกเรียกใช้, แม้ว่ามันจะปรากฏเป็นคุณสมบัติ get/set ปกติ.
Layer layer = image.Layers[0];
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}");
}
เริ่มต้นอย่างเร็ว
git clone https://github.com/aspose-psd-foss/Aspose.PSD-FOSS-for-.NET.git
cd Aspose.PSD-FOSS-for-.NET
dotnet buildusing Aspose.PSD.FileFormats.Psd;
using Aspose.PSD.FileFormats.Psd.Layers;
using System.Linq;
using var image = (PsdImage)Image.Load("input.psd");
var visibleLayers = image.Layers.Where(layer => layer.IsVisible);
foreach (Layer layer in visibleLayers)
{
Console.WriteLine($"{layer.Name}: Opacity={layer.Opacity}, BlendMode={layer.BlendModeKey}");
}
รูปแบบที่รองรับ
| รูปแบบ | ส่วนขยาย | อ่าน | เขียน |
|---|---|---|---|
| เอกสาร Photoshop | psd | ✓ | ✓ |
| เอกสาร Photoshop ขนาดใหญ่ | psb | ✓ | ✓ |
โอเพ่นซอร์ส & การให้สิทธิ์
Aspose.PSD FOSS สำหรับ .NET มีสัญญาอนุญาต MIT และสามารถใช้ในผลิตภัณฑ์เชิงพาณิชย์ได้โดยไม่มีค่าลิขสิทธิ์, ไม่มีลายน้ำการประเมินหรือขีดจำกัดการใช้งาน.
แพ็คเกจนี้อยู่ที่เวอร์ชัน 1.0.0 และต้องการเฉพาะ .NET 10.0 ที่เวลาเรียกใช้ — ไม่มีการพึ่งพาจากบุคคลที่สามอื่นใด.