Введение
Aspose.PSD FOSS для Python загружает, проверяет и сохраняет документы PSD и PSB с помощью небольшого набора классов. Эта статья рассматривает части ядра API, которые вводный пост не раскрывал подробно: как Image и PsdImage взаимосвязаны, типы значений геометрии, используемые по всей библиотеке, и как библиотека сообщает об ошибках загрузки и сохранения.
Что включено
Изображение и PsdImage
Image — это минимальный абстрактный базовый класс: он определяет только load(), который проверяет ввод и возвращает конкретный подкласс — для ввода PSD/PSB этот подкласс является PsdImage. Полная поверхность документа — color_mode, version, layers, compression, bits_per_channel, size и многое другое — находится в самом PsdImage, а не в базовом Image.
from aspose_psd_foss.image import Image
from aspose_psd_foss.psdimage import PsdImage
with Image.load("input.psd") as image:
assert isinstance(image, PsdImage)
print(f"ColorMode: {image.color_mode}, Version: {image.version}")
print(f"Size: {image.size}, Layers: {image.layer_count}")
Типы значений геометрии
Point, Size, Rectangle и RectangleF — это типы значений, используемые для координат и размеров в API — Layer.bounds является Rectangle, а PsdImage.size является Size. Rectangle содержит реальные методы геометрии: contains(), intersect_rect(), union_rect(), inflate() и from_left_top_right_bottom() и другие.
from aspose_psd_foss.rectangle import Rectangle
layer_bounds = image.layers[0].bounds
fully_inside = layer_bounds.contains(Rectangle(0, 0, 10, 10))
overlap = Rectangle.intersect_rect(layer_bounds, Rectangle(0, 0, 100, 100))
print(f"Contains (0,0,10,10): {fully_inside}, overlap: {overlap}")
Ресурсные блоки и исключения
PsdImage.image_resources возвращает разобранный список объектов ResourceBlock — каждый из них предоставляет id, name, data_size и signature. В этой FOSS-сборке image_resources, global_layer_resources, active_layer и has_transparency_data можно только читать, но не переназначать — у каждого есть сеттер, который вызывает NotSupportedException, если его вызвать, поэтому рассматривайте их как доступные только для чтения, хотя они выглядят как обычные свойства.
Ошибки загрузки и сохранения проявляются в виде двух специальных типов исключений: PsdLoadException, когда документ не может быть разобран, и PsdSaveException, когда документ нельзя записать обратно.
from aspose_psd_foss.psdimage import PsdImage
from aspose_psd_foss.coreexceptions.psdloadexception import PsdLoadException
try:
with PsdImage.load("input.psd") as image:
for resource in image.image_resources:
print(f"Resource {resource.id}: {resource.name} ({resource.data_size} bytes)")
except PsdLoadException as ex:
print(f"Failed to load input.psd: {ex}")
Быстрый старт
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:$PYTHONPATHfrom aspose_psd_foss.psdimage import PsdImage
from aspose_psd_foss.coreexceptions.psdloadexception import PsdLoadException
try:
with PsdImage.load("input.psd") as image:
print(f"Size: {image.size}, ColorMode: {image.color_mode}")
print(f"ImageResources: {image.resource_count}")
except PsdLoadException as ex:
print(f"Load failed: {ex}")
Поддерживаемые форматы
| Формат | Расширение | Читать | Записать |
|---|---|---|---|
| PSD | psd | ✓ | ✓ |
| PSB | psb | ✓ | ✓ |
Open Source и лицензирование
Aspose.PSD FOSS для Python лицензирован по MIT и может использоваться в коммерческих продуктах без роялти, без водяного знака оценки и без ограничения использования.
Библиотека не имеет сторонних нативных зависимостей — требуется только стандартная библиотека Python во время выполнения.