如何在 .NET 中使用 PSD 图层
本指南展示了如何列出文档的图层、读取和更改可编辑的图层元数据、重新定位图层以及从集合中移除图层。已加载的 PsdImage 的 Layers 属性返回其 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 都具有可用的 setter:
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 每个都有可用的 setter,可重新定位图层:
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 本身具有可用的 setter,因此您可以替换整个集合(例如,移除某个图层):
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 有可用的 setter,因此您可以为其分配过滤后的数组来删除图层(参见步骤 6)。
有哪些混合模式可用?
BlendMode 包含诸如 Normal、Multiply、Screen、Overlay 和 Darken 等值——通过 Layer.BlendModeKey 设置。
图层蒙版数据可用吗?
Layer.LayerMaskData 有可用的 getter,但在此 FOSS 构建中,它的 setter 会抛出 NotSupportedException。