Как работать с Aspose.PSD FOSS Core API в Python

Как работать с Aspose.PSD FOSS Core API в Python

Aspose.PSD FOSS для Python загружает и проверяет структуру документа PSD/PSB через PsdImage, подкласс Image. В этой статье рассматривается загрузка документа, чтение его заголовка и ресурсов изображений, а также сохранение его обратно на диск.

Пошаговое руководство

Шаг 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: Загрузить документ PSD/PSB

PsdImage.load() открывает документ из пути к файлу или потока:

from aspose_psd_foss.psdimage import PsdImage

image = PsdImage.load("input.psd")

Шаг 4: Проверить заголовок документа

PsdImage раскрывает поля заголовка, считанные из разобранного документа: width, height, bits_per_channel, color_mode (значение ColorModes), и compression (значение CompressionMethod):

print(f"{image.width}x{image.height}, {image.bits_per_channel} bpc")
print(f"Color mode: {image.color_mode}")    # e.g. ColorModes.RGB
print(f"Compression: {image.compression}")  # e.g. CompressionMethod.RLE
print(f"Flattened: {image.is_flatten}")

Значения ColorModes — BITMAP, GRAYSCALE, INDEXED, RGB, CMYK, MULTICHANNEL, DUOTONE и LAB. Значения CompressionMethod — RAW, RLE, ZIP_WITHOUT_PREDICTION и ZIP_WITH_PREDICTION.


Шаг 5: Считать блоки ресурсов изображений

image_resources возвращает разобранные записи ResourceBlock документа. Каждый блок раскрывает id, name и size:

for resource in image.image_resources:
    print(f"Resource {resource.id} \"{resource.name}\" - {resource.size} bytes")

image_resources является только для чтения в этой FOSS-сборке — присваивание ему вызывает NotSupportedException (см. раздел «Известные ограничения» в FAQ).


Шаг 6: Сохранить документ

Запишите документ обратно на диск, затем освободите ресурсы изображения:

image.save("output.psd")
image.dispose()

Общие проблемы и решения

PsdLoadException при загрузке файла. Ввод не является корректным документом PSD/PSB или его заголовок не прошёл проверку. Убедитесь, что файл является подлинным файлом PSD/PSB перед загрузкой.

NotSupportedException при установке image_resources or global_layer_resources. Эти сеттеры не поддерживаются в этой FOSS-сборке. Рассматривайте image_resources как только для чтения.

Часто задаваемые вопросы

Могу ли я загрузить файл PSD из потока вместо пути к файлу?

Да — PsdImage.load() принимает либо строку пути к файлу, либо читаемый поток (io.BytesIO/io.BufferedIOBase).

Содержит ли image_resources данные слоёв?

Нет. image_resources содержит блоки ресурсов уровня документа (разобранные из раздела ресурсов изображения PSD). Данные уровня слоев читаются через PsdImage.layers — см. Работа со слоями.

Является ли PsdImage.version версией формата файла PSD?

Нет. PsdImage.version сообщает внутренний номер версии API, совместимый с Aspose.PSD (в данный момент 6) — он не связан с тем, является ли загруженный файл PSD или PSB. Его сеттер принимает только значение 6; любое другое значение вызывает ValueError.

См. также:

 Русский