Layers

Layers

PsdImage.layers возвращает каждый разобранный слой в виде списка объектов Layer. Каждый Layer раскрывает свою геометрию, видимость и состояние композитинга, а также метаданные о его каналах, маске и диапазонах смешивания.


Чтение метаданных слоя

name, bounds (и производные width/height/top/left/bottom/right), is_visible, opacity, clipping, blend_mode_key и channels_count могут быть прочитаны напрямую.

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}")

Поддерживаемые правки метаданных

name, is_visible, opacity, clipping, blend_mode_key и четыре границы (top/left/bottom/right) могут быть изменены на месте и записаны обратно с помощью PsdImage.save().

from aspose_psd_foss.psdimage import PsdImage
from aspose_psd_foss.layers.blendmode import BlendMode

with PsdImage.load("input.psd") as image:
    layer = image.layers[0]
    layer.name = f"{layer.name} (edited)"
    layer.is_visible = not layer.is_visible
    layer.opacity = 128
    layer.blend_mode_key = BlendMode.MULTIPLY
    image.save("output.psd")

Метаданные каналов и маски

channel_information, layer_mask_data и layer_blending_ranges_data являются только для чтения в этой FOSS-сборке — их сеттеры вызывают NotSupportedException.

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}")

Удаление или переупорядочивание слоёв

PsdImage.layers имеет как сеттер, так и геттер: присваивание отфильтрованного или переупорядоченного списка заменяет коллекцию слоёв документа.

from aspose_psd_foss.psdimage import PsdImage

with PsdImage.load("input.psd") as image:
    image.layers = [layer for layer in image.layers if layer.is_visible]
    image.save("output.psd")

Советы и лучшие практики

  • Индексируйте image.layers по позиции; порядок списка соответствует порядку слоёв документа.
  • blend_mode_key принимает любое значение перечисления BlendMode — проверка соответствия объявленному цветовому режиму документа не выполняется.
  • channel_information, layer_mask_data и layer_blending_ranges_data можно читать, но никогда не переназначать.
  • Вызовите PsdImage.save() один раз после всех правок; каждый вызов записывает полный документ.

Распространённые проблемы

ПроблемаПричинаИсправление
NotSupportedException при установке channel_information, layer_mask_data или layer_blending_ranges_dataЭти 3 свойства доступны только для чтения в сборке FOSS, несмотря на наличие сеттераЧитайте значение; не пытайтесь переназначить его
layer_mask_data доступ при отсутствии маскиНе у каждого слоя есть подраздел маскиПроверьте layer.has_mask_data перед чтением layer.layer_mask_data

FAQ

Могу ли я удалить слой?

Да — переназначьте image.layers на отфильтрованный список.

Могу ли я изменить канал или данные маски слоя?

Нет. channel_information, layer_mask_data и layer_blending_ranges_data доступны только для чтения — можно изменить только name, is_visible, opacity, clipping, blend_mode_key и границы.


Сводка API Reference

Класс/МетодОписание:
PsdImage.layersПолучает или задает коллекцию слоёв — можно изменять для удаления/перестановки
Layer.name / is_visible / opacity / clipping / blend_mode_key / top / left / bottom / rightПоддерживаемые изменения метаданных слоя
Layer.bounds / width / height / channels_countГеометрия слоя только для чтения
Layer.channel_information / layer_mask_data / layer_blending_ranges_dataМетаданные канала/маски/смешивания только для чтения

См. также:

 Русский