Як перевірити розділи 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 властивість також має getter, але її setter викидає NotSupportedException у цьому FOSS-збірці — дивіться Troubleshooting повний список read-only сеттерів.

Типові проблеми та виправлення

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?

Вони описують одне й те саме базове кодування за допомогою двох окремих enum-ів: image.compression повертає значення типу CompressionMethod, тоді як image.image_data_info.kind повертає значення типу ImageDataKind.

Дивіться також

 Українська