Как сохранить и экспортировать 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.