Как просматривать разделы PSD-документа в Python

Как просматривать разделы PSD-документа в Python

Загруженный PsdImage предоставляет объекты-резюме только для чтения структурных разделов PSD/PSB документа — заголовок, раздел данных цвета, раздел данных изображения и раздел ресурсов изображения — без необходимости ручного побайтного парсинга.

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

Шаг 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: Импортируйте необходимые классы

from aspose_psd_foss.psdimage import PsdImage

Шаг 3: Просмотрите раздел заголовка

PsdImage.header возвращает PsdHeader с необработанными структурными полями документа:

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

header = image.header
print(f"Size: {header.width}x{header.height}, channels: {header.channels}")
print(f"Bit depth: {header.bit_depth}, raw color mode: {header.color_mode}")
print(f"Is PSB: {header.is_large_document}")

PsdHeader.color_mode возвращает необработанное целочисленное поле режима цвета, как оно хранится в файле — используйте PsdImage.color_mode вместо него, если вам нужен строго типизированный ColorModes enum.


Шаг 4: Проверьте раздел данных цвета

PsdImage.color_data_info возвращает PsdColorDataInfo сводку; kind является значением PsdColorDataKind (NONE, INDEXED_PALETTE, RGB_PAYLOAD, CMYK_PAYLOAD или RAW_PRESERVED):

if image.has_color_mode_data:
    color_info = image.color_data_info
    print(f"Color data kind: {color_info.kind}, raw bytes: {color_info.raw_data_length}")

    if color_info.indexed_palette is not None:
        print(f"Indexed palette entries: {len(color_info.indexed_palette.entries)}")

Шаг 5: Проверьте раздел данных изображения

PsdImage.image_data_info возвращает PsdImageDataInfo сводку, описывающую, как закодированы объединённые пиксельные данные:

data_info = image.image_data_info
print(f"Compression: {image.compression}")
print(f"Data kind: {data_info.kind}, uses prediction: {data_info.uses_prediction}")
print(f"Compressed payload length: {data_info.compressed_payload_length}")

data_info.kind является значением ImageDataKind (RAW, RLE, ZIP или UNKNOWN), описывающим собственное кодирование объединённых данных изображения — image.compression сообщает то же кодирование через отдельный CompressionMethod enum.


Шаг 6: Проверьте раздел ресурсов изображения

print(f"Has image resources: {image.has_image_resources}")
print(f"Resource count: {image.resource_count}")

for resource in image.resources:
    print(f"Resource ID: {resource.resource_id}, kind: {resource.kind}")

PsdImage.resources возвращает только для чтения PsdResourceInfo резюме. Отдельный PsdImage.image_resources у свойства также есть геттер, но его сеттер вызывает NotSupportedException в этой сборке FOSS — см Troubleshooting полный список только для чтения сеттеров.

Распространённые проблемы и решения

header.color_mode не соответствует image.color_mode. Это ожидается — PsdHeader.color_mode это необработанное целочисленное поле из файла, тогда как PsdImage.color_mode является строго типизированным ColorModes перечисление, построенное из него.

color_data_info.indexed_palette is None. Тип цветовых данных документа не INDEXED_PALETTE — только документы с индексированными цветами содержат палитру.

Setting image.image_resources raises NotSupportedException. Этот сеттер не поддерживается в этой FOSS-сборке; рассматривайте image_resources and resources как только для чтения.

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

Могу ли я изменять заголовок, секцию цветовых данных или секцию данных изображения напрямую?

Нет — PsdHeader, PsdColorDataInfo, ColorData и PsdImageDataInfo — все являются объектами-резюме только для чтения в этой сборке FOSS. Для их свойств нет публичных сеттеров.

В чём разница между image.compression и image.image_data_kind?

Они описывают одно и то же базовое кодирование через два отдельных перечисления: image.compression возвращает значение CompressionMethod, тогда как image.image_data_info.kind возвращает значение ImageDataKind.

См. также:

 Русский