Как сохранить и экспортировать PSD документы в Python

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

См. также:

 Русский