Введение
PsdImage.layers возвращает каждый слой в документе PSD или PSB в виде списка объектов Layer. Эта статья рассматривает конкретно то, что раскрывает 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, описывающих идентификатор каждого канала, метод сжатия и длину в байтах. Layer.layer_mask_data ( LayerMaskDataShort, если присутствует) описывает границы и флаги маски слоя; Layer.layer_blending_ranges_data предоставляет составные и посекционные диапазоны смешивания. Все три этих свойства являются только для чтения в этой FOSS-сборке — их сеттеры вызывают 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:$PYTHONPATHfrom 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}")
Поддерживаемые форматы
| Формат | Расширение | Чтение | Запись |
|---|---|---|---|
| PSD | psd | ✓ | ✓ |
| PSB | psb | ✓ | ✓ |
Открытый исходный код и лицензирование
Aspose.PSD FOSS для Python лицензирован по MIT и может использоваться в коммерческих продуктах без роялти, без водяного знака оценки и без ограничения использования.
Библиотека не имеет сторонних нативных зависимостей — в runtime требуется только стандартная библиотека Python.