Layers
Layers
PsdImage.Layers 返回每个解析的图层为一个 Layer 数组。每个 Layer 都公开其几何形状、可见性和合成状态,以及关于其通道、蒙版和混合范围的元数据。
读取图层元数据
Name、Bounds(以及派生的 Width/Height/Top/Left/Bottom/Right)、IsVisible、Opacity、Clipping、BlendModeKey 和 ChannelsCount 都可以直接读取。
foreach (Layer layer in image.Layers)
{
Console.WriteLine($"{layer.Name}: {layer.Bounds}, " +
$"Visible={layer.IsVisible}, Opacity={layer.Opacity}, " +
$"BlendMode={layer.BlendModeKey}");
}支持的元数据编辑
Name、IsVisible、Opacity、Clipping、BlendModeKey,以及四个边界边缘(Top/Left/Bottom/Right)可以就地修改,并使用 PsdImage.Save() 写回。
Layer layer = image.Layers[0];
layer.Name = $"{layer.Name} (edited)";
layer.IsVisible = !layer.IsVisible;
layer.Opacity = 128;
layer.BlendModeKey = BlendMode.Multiply;
image.Save(outputPath);通道和蒙版元数据
ChannelInformation、LayerMaskData 和 LayerBlendingRangesData 在此 FOSS 构建中是只读的——它们的 setter 会抛出 NotSupportedException。
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}");
}删除或重新排序图层
PsdImage.Layers 既有 setter 也有 getter:将过滤或重新排序后的数组赋值会替换文档的图层集合。没有公开的方式来构造全新的 Layer 实例,因此此功能仅支持删除或重新排序已存在的图层——不支持从头添加新图层。
// Keep only visible layers
image.Layers = image.Layers.Where(layer => layer.IsVisible).ToArray();
image.Save(outputPath);提示与最佳实践
- 通过位置索引
image.Layers;数组顺序与文档自身的图层顺序相匹配。 BlendModeKey接受任何BlendMode枚举值——不会针对文档声明的颜色模式进行验证。ChannelInformation、LayerMaskData和LayerBlendingRangesData可以读取,但永不可重新赋值。- 在所有编辑完成后调用一次
PsdImage.Save();每次调用都会写入完整文档。
常见问题
| 问题 | 原因 | 修复 |
|---|---|---|
NotSupportedException 在设置 ChannelInformation、LayerMaskData 或 LayerBlendingRangesData 时 | 尽管具有 setter,这三个属性在 FOSS 构建中是只读的 | 读取该值;不要尝试重新赋值 |
LayerMaskData 对于图层来说是 null | 并非每个图层都有遮罩子部分 | 在使用前检查 null(layer.LayerMaskData is { } mask) |
FAQ
我可以删除图层吗?
是 — 将 image.Layers 重新分配为过滤后的数组。由于 Layer 没有公共构造函数,您无法添加全新的图层;只能保留、删除或重新排序已有的已解析图层。
我可以更改图层的通道或蒙版数据吗?
不。ChannelInformation、LayerMaskData 和 LayerBlendingRangesData 为只读 —— 仅可更改 Name、IsVisible、Opacity、Clipping、BlendModeKey,以及边界边缘。
API Reference 摘要
| 类/方法 | 描述 |
|---|---|
PsdImage.Layers | 获取或设置图层集合 — 仅在删除/重新排序时可设置 |
Layer.Name / IsVisible / Opacity / Clipping / BlendModeKey / Top / Left / Bottom / Right | 支持的图层元数据编辑 |
Layer.Bounds / Width / Height / ChannelsCount | 只读图层几何 |
Layer.ChannelInformation / LayerMaskData / LayerBlendingRangesData | 只读通道/遮罩/混合元数据 |