Як зберегти та експортувати PSD-документи у Python
У цьому посібнику показано, як зберегти відредагований документ у файл, у відкритий потік, а також як звільнити завантажене зображення після цього. PsdImage.save є єдиною публічною точкою входу для запису документа назад — вона приймає або шлях до файлу, або вже відкритий записувальний потік. Записувач низькорівневих секцій, який виконує фактичне кодування байтів, є внутрішньою деталлю реалізації, а не тим, що ви викликаєте безпосередньо.
Покроковий посібник
Крок 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 — єдине клас, яке потрібне прикладам у цьому посібнику:
from aspose_psd_foss.psdimage import PsdImageКрок 3: Зберегти у шлях до файлу
Завантажте документ, внесіть правку, а потім збережіть його назад у шлях до файлу:
image = PsdImage.load("input.psd")
image.layers[0].is_visible = False
image.save("output.psd")Крок 4: Зберегти у відкритий потік
Передача потоку замість шляху залишає потік відкритим після збереження — ви керуєте тим, коли його закрити:
with open("output.psd", "wb") as stream:
image.save(stream)Крок 5: Вивільнити зображення
Звільніть ресурси, які утримує завантажений PsdImage, коли ви закінчите з ним працювати:
image.dispose()Поширені проблеми та виправлення
RuntimeError: PsdImage has been disposed. при виклику save. Зображення вже було звільнено (через dispose() або with блок, який завершився) перед save було викликано. Викличте save перед звільненням.
PsdSaveException про довжину рядка Pascal. Значення рядка перевищує 255 байт — дивіться Обробка виключень PSD Core and Troubleshooting.
Немає способу примусово встановити контейнер PSD або PSB під час збереження. Не існує публічного API для вибору формату вихідного контейнера — збереження завжди відображає той формат (is_large_document / is_psb) у якому документ був завантажений. Якщо вам потрібен інший формат контейнера, у цьому FOSS-збірці немає підтримуваного шляху конвертації.
Поширені запитання
Чи закриває збереження у потік цей потік після завершення?
Ні — коли ви передаєте потік до save, потік залишається відкритим після цього, щоб ви керували його життєвим циклом (див. крок 4). Навпаки, збереження у шлях файлу відкриває і закриває файл всередині.
Чи можу я викликати внутрішній записувач розділів безпосередньо замість save?
Ні — записувач рівня розділу є внутрішньою деталлю реалізації, яку викликає PsdImage.save. Не існує задокументованого, підтримуваного способу записати документ, окрім виклику save на екземплярі PsdImage.