Вступ
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 і може використовуватись у комерційних продуктах без роялті, без водяного знака оцінки чи обмежень використання.
Бібліотека не має жодних сторонніх нативних залежностей — під час виконання потрібна лише стандартна бібліотека Python.