Як працювати з шарами PSD у Python
У цьому посібнику показано, як перелічити шари документа, читати та змінювати редаговані метадані шару, переміщати шар і видаляти шар із колекції. Властивість layers завантаженого PsdImage повертає його колекцію об’єктів Layer. Кожен Layer надає редаговані метадані — назву, видимість, прозорість, обрізку, режим змішування та позицію (межі країв) — а також лише для читання загальні межі та інформацію про канали.
Покроковий посібник
Крок 1: Встановити пакет
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Крок 2: Імпортувати необхідні класи
PsdImage завантажує документ; BlendMode використовується пізніше для встановлення режиму змішування шару:
from aspose_psd_foss.psdimage import PsdImage
from aspose_psd_foss.layers.blendmode import BlendModeКрок 3: Завантажити документ і перелічити його шари
Завантажте документ, а потім ітеруйте layers, щоб побачити назву та геометрію кожного шару:
image = PsdImage.load("input.psd")
for layer in image.layers:
print(f"{layer.name}: {layer.width}x{layer.height} at ({layer.left},{layer.top})")Крок 4: Читання та редагування видимості шару, прозорості та режиму змішування
is_visible, opacity (звичайно 0-255), clipping, name та blend_mode_key мають працюючі сеттери:
layer = image.layers[0]
layer.is_visible = False # hide the layer
layer.opacity = 200 # ~78% opacity
layer.blend_mode_key = BlendMode.MULTIPLY
layer.name = "Renamed Layer"Крок 5: Читання та переміщення меж шару
bounds, width, height та channels_count лише для читання — але top, left, bottom та right кожен має робочий setter, який переміщує шар:
print(f"Bounds: {layer.bounds}")
print(f"Channels: {layer.channels_count}")
layer.left = 10
layer.top = 20
layer.right = 40
layer.bottom = 60Крок 6: Замінити колекцію шарів
PsdImage.layers сам має робочий setter, тому ви можете замінити всю колекцію (наприклад, щоб видалити шар):
image.layers = [l for l in image.layers if l.name != "Renamed Layer"]Крок 7: Зберегти документ
Збережіть усі зміни, внесені на попередніх кроках, на диск, а потім звільніть ресурси зображення:
image.save("output.psd")
image.dispose()Типові проблеми та їх вирішення
NotSupportedException при встановленні channel_information, layer_mask_data, або layer_blending_ranges_data. Ці три Layer встановлювачі не підтримуються в цьому FOSS-збірці — розглядайте їх як лише для читання.
Значення прозорості виглядає неправильним після його встановлення. opacity зазвичай є значенням у діапазоні 0-255, а не дробом 0.0-1.0 або відсотком — layer.opacity = 200 означає приблизно 78% непрозорості (200/255).
Зміни шару не відображаються після збереження. Підтвердіть, що ви змінюєте Layer екземпляр, отриманий з image.layers, і що ви викликаєте image.save() після внесення ваших правок.
Часті питання
Чи можу я видалити шар з документа?
Так — PsdImage.layers має працюючий сеттер, тому ви можете призначити йому відфільтрований список для видалення шарів (див. крок 6).
Які режими змішування доступні?
BlendMode включає значення, такі як NORMAL, MULTIPLY, SCREEN, OVERLAY та DARKEN, серед інших — встановлюються через Layer.blend_mode_key.
Чи доступні дані маски шару?
Layer.layer_mask_data має працюючий геттер, але його сеттер викликає NotSupportedException у цій FOSS збірці.