简介

PsdImage.layers 将 PSD 或 PSB 文档中的每个图层返回为 Layer 对象的列表。本文专门查看 Layer 所公开的内容:其几何和可视状态、混合模式和遮罩标志枚举,以及描述图层通道、遮罩和混合范围的元数据类。


包含内容

图层类

每个 Layer 都包含一个名称(name)、一个边界 Rectangle(bounds,以及派生的 width/height/top/left/bottom/right)、可见性和合成状态(is_visible、opacity、clipping、blend_mode_key)以及通道计数(channels_count)。name、is_visible、opacity、clipping、blend_mode_key 和四个边界边缘都可以通过 PsdImage.save() 进行更改并写回。

from aspose_psd_foss.psdimage import PsdImage

with PsdImage.load("input.psd") as image:
    for layer in image.layers:
        print(f"{layer.name}: {layer.bounds}, "
              f"Visible={layer.is_visible}, Opacity={layer.opacity}, "
              f"BlendMode={layer.blend_mode_key}")

混合模式和遮罩标志

blend_mode_key 是一个 BlendMode 枚举值——该库定义了 29 种标准 PSD 混合模式(NORMAL、MULTIPLY、SCREEN、OVERLAY、DARKEN、LIGHTEN、COLORDODGE、COLORBURN、HARDLIGHT、SOFTLIGHT、DIFFERENCE、EXCLUSION、HUE、SATURATION、COLOR、LUMINOSITY 等)。另一个 LayerMaskFlags 标志枚举(NONE、RELATIVE_TO_LAYER、DISABLED、INVERTED_WHEN_BLENDING、USER_MASK_FROM_RENDERING_OTHER_DATA、USER_OR_VECTOR_MASKS_HAVE_PARAMETERS)描述了图层拥有遮罩时的遮罩渲染行为。

通道和遮罩元数据

Layer.channel_information 返回一个 ChannelInformation 对象的列表,描述每个通道的 ID、压缩方法和字节长度。Layer.layer_mask_data(在存在时为 LayerMaskDataShort)描述图层遮罩的边界和标志;Layer.layer_blending_ranges_data 暴露合成和每通道的混合范围。这三个属性在此 FOSS 构建中都是只读的——如果调用其 setter,会抛出 NotSupportedException,即使它们看起来像普通属性。

from aspose_psd_foss.psdimage import PsdImage

with PsdImage.load("input.psd") as image:
    layer = image.layers[0]
    for channel in layer.channel_information:
        print(f"Channel {channel.ChannelID}: {channel.compression_method}, {channel.length} bytes")

    if layer.has_mask_data:
        mask = layer.layer_mask_data
        print(f"Mask bounds: {mask.mask_rectangle}, flags: {mask.flags}")

快速入门

git clone https://github.com/aspose-psd-foss/Aspose.PSD-FOSS-for-Python.git
cd Aspose.PSD-FOSS-for-Python
# No packaging manifest is published yet -- run from this folder,
# or add it to PYTHONPATH:
export PYTHONPATH=$PWD:$PYTHONPATH
from aspose_psd_foss.psdimage import PsdImage

with PsdImage.load("input.psd") as image:
    visible_layers = [layer for layer in image.layers if layer.is_visible]
    for layer in visible_layers:
        print(f"{layer.name}: Opacity={layer.opacity}, BlendMode={layer.blend_mode_key}")

支持的格式

格式扩展名读取写入
PSDpsd✓✓
PSBpsb✓✓

开源与许可

Aspose.PSD FOSS 对于 Python 使用 MIT 许可证,可在商业产品中使用且无需版税,也没有评估水印或使用限制。

该库没有任何第三方本地依赖——运行时仅需要 Python 标准库。


入门

相关资源