Як завантажити PSD-документ у Python

Як завантажити PSD-документ у Python

PsdImage.load — єдина публічна точка входу для відкриття документа 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
from aspose_psd_foss.coreexceptions.psdloadexception import PsdLoadException

Крок 3: Завантажте за шляхом до файлу

image = PsdImage.load("input.psd")
print(f"Loaded: {image.width}x{image.height}")
image.dispose()

Крок 4: Завантаження з потоку

Потік не обов’язково має бути перемотуваним — load читає весь його вміст у внутрішній буфер перед розбором:

with open("input.psd", "rb") as stream:
    image = PsdImage.load(stream)

print(f"Loaded from stream: {image.width}x{image.height}")
image.dispose()

Поширені проблеми та їх вирішення

FileNotFoundError: File not found: .... Шлях, переданий у load не вказує на існуючий файл — load checks os.path.isfile перш ніж спробувати його відкрити.

PsdLoadException: Unexpected end of PSD/PSB data while reading the file structure. Потік джерела вичерпав дані під час розбору (an EOFError під час читання) — файл, ймовірно, обрізаний.

PsdLoadException: Failed to read PSD/PSB data from the source stream. Сталася помилка вводу/виводу під час читання самого потоку, вона була обгорнута та піднята заново як PsdLoadException.

ArgumentNullException при виклику load. load було викликано з None як аргумент потоку.

Часті питання

Чи потрібно перемотувати потік назад до його початку перед викликом load?

Ні — якщо потік підтримує перемотування, load відновлює його початкову позицію після читання; якщо він не підтримує перемотування, load все одно працює, оскільки буферизує вміст потоку всередині перед розбором.

У чому різниця між двома вищезгаданими помилками FileNotFoundError/PsdLoadException?

Відсутність шляху до файлу викликає стандартну FileNotFoundError перед початком будь-якого аналізу. A PsdLoadException замість цього означає, що файл (або потік) був знайдений і відкритий, але дані PSD/PSB самі обрізані, пошкоджені або іншим чином нечитабельні після початку аналізу — дивіться також Troubleshooting для версійно- та межово-залежних PsdLoadException варіантів.

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

 Українська