Как работать с 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.