简介

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 是一个 BlendMode 枚举值——库定义了全部 29 种标准 PSD 混合模式(Normal、Multiply、Screen、Overlay、Darken、Lighten、ColorDodge、ColorBurn、HardLight、SoftLight、Difference、Exclusion、Hue、Saturation、Color、Luminosity 等)。另一个 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 build
using 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 —— 并没有其他第三方依赖。


入门

相关资源